问题 填空题

给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t所指字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串。若未找到,则函数的返回值为NULL。例如,字符串s中的内容为“abcdabfabcdx”,若t中的内容为“ah”时,则输出结果为:abcdx;若t中的内容为“abd”,则程序输出未找到的信息:not be found!。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
文件MODI1.C内容如下:
#include<stdio.h>
#include<string.h>
char *fun(char *s,char *t)
char *p,*r,*a;
/**********found**********/
a=NUll;
while(*s)
p=s;r=t;
while(*r)
/**********found**********/
if(r==P)r++;p++;
else break;
if(*r==’\0’)a=s;
s++:

return a;

void main( )
char s[100],t[100],*p;
printf("\nPlease enter string s: ");
scanf("%s",s);
printf("\nPlease enter string t: ");
scanf("%s",t);
p=fun(s,t);
if(P)printf("\nTbe result is: %s\n",p);
else printf("\nNot found!\n");

答案

参考答案:第1处:将“a=Null;”改为“a=NULL;”。
第2处:将“if(r==p)”改为“if(*r==*p)”。

解析: 第1处错误是指针赋值错误,C语言中的空值用NULL来表示,“NULL”必须大写。第2处错误是指针使用错误。题目要求找到最后一次出现t所指字符串的地址。函数fun中两个循环嵌套实现找子串的功能,既然是找子串,就必然要将两个字符串中的字符进行比较,而不是将字符串的地址进行比较,所以应该在指针变量的前面加上“*”号,将指针r和指针p所指的字符进行是否相等的比较。
[归纳总结] 指针错误是程序修改题中常见的一类错误,也是考生感觉有一定难度的一类题目。指针错误通常出现在3个方面:
(1)指针定义有误。当指针作为形参时,需要通过实参的类型来决定形参指针的类型。尤其要注意实参当一维数组和二维数组时,形参指针的定义格式。
(2)指针使用有误。例如,对指针赋值,应该赋予一个地址值;而当要取出指针指向的数据时,需要通过指针运算符“*”来实现。
(3)空值书写错误。空值正确的表示是NULL。

配伍题 B型题
问答题