谁帮我解释下这道C语言题

来源:百度知道 编辑:UC知道 时间:2024/06/30 17:37:31
给定程序中,函数fun的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。
例如,当字符串中的内容为“abcdabfabcdx”、t中的内容为“ab”时,输出结果应是abcdx。当字符串中的内容为“abcdabfabcdx”、t中的内容为“abd”时,则程序输出未找到信息not be found!。
请改正程序中的错误,使其能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <string.h>
char *fun(char *s,char *t)
{
char *p,*r,*a;
a=Null;
while(*s)
{
p=s;r=t;
while(*r)
if(*r==*p)
{r++;p++;}
else break;
if(*r=='\0') a=s;
s++;
}
return a ;
}
main()
{
char s[100],t[100],*p;
printf("\nPlease enter string S :");
scanf("%s",s);
printf("\nPlease enter substring t :");
scanf("%s",t);
p=fun(s,t);
if(p) printf("\nThe result is :%s\n",p);
else printf("\nNot found !\

错误就一个Null应该为大写的,那个scanf("%s",s); scanf("%s",t);里面的s和t本身代表就是地址所以前面不用加"&"号的,改了之后就可以运行了,我亲自用TC2.0试的.
楼上的 把你的这句""楼下的.. s 和 t 是数组的指针啊 scanf("%s",s)是对的..."" 改一下吧 最好改成名字.....

用的对不对 你自己把代码放到编译器编译一下

楼下的.. s 和 t 是数组的指针啊 scanf("%s",s)是对的...

目前有两个错误
1.a=Null; 应该改为 a=NULL, C语言区分大小写
2.scanf("%s",s); scanf("%s",t); 这两句应该改为scanf("%s",&s); scanf("%s",&t); 这个取地址符号不能忘,s和t是字符数组的首地址,可以看作代表整个数组。scanf中输入&s和&t就是存放s和t的地方

改了后应该可以正常运行