问答题
给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串:若未找到,则函数值为NULL。 例如,当字符串中的内容为''abcdabfabcdx",t中的内容为“ab”时,输出结果应是“abcdx”。 当字符串中的内容为“abcdabfabcdx”,t中的内容为“abd”时,则程序输出未找到信息“notbe found!”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 #include<string.h>3 char *fun(char*s,char*t)4 {5 char *p, *r, *a;6 /**********found**********/7 a=Null;8 while(*s)9 { p=s;r=t;10 while(*r)11 /**********found**********/12 if(r==p)13 { r++;p++;)14 else break;15 if(*r=='\0')a=s;16 s++;17 }18 return a;19 }20 main()21 {22 char s[100],t[100],*p;23 printf(''\nPlease enter string s:'');scanf(''%s'',s);24 printf(''\nPlease enter substringt:'');scanf(''%s'',t);25 p=fun(s,t);26 if (p)printf(''\nThe result is:%sin'',p);27 else printf(''\nNot found!\n'');28 }
【正确答案】正确答案:(1)a=NULL; (2)if(*r==*p)
【答案解析】解析:函数功能是求得字符串中某子串最后一次出现的地址。(1)第一个标识下面:语句“a=Null;”中的Null未定义。NULL代表空值,但程序中写成了Null。所以,改成“a=NULL;”。(2)程序的主体是二重循环,其中外循环使指针s逐个指向字符串的字符,直到遇到串结束符退出循环,内循环检查指针p与r所指字符串是否匹配。因为这里p、r是指针,如果使用判断表达式“if(r==p)”,那么比较的是地址,而题目要求比较它们所指的字符。所以,改为:“if(*r==*p)”。