请大家帮忙看看这道C语言题

下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如:当字... 下列给定程序中函数fun的功能是:求出在字符串中最后一次出现的子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串;若未找到,则函数值为NULL。例如:当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出结果应是:abcdx。当字符串中的内容为abcdabfabcdx,t中的内容为abd时,则程序输出未找到信息:not be found!。

#include <conio.h>
#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;
}
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!\n");
}

我想问的就是主函数中的p=fun(s,t),但是最后一次fun函数循环中,s++后while(*s)依旧成立,之后p=s,此时p指针指向s数组的最后一个字符,那么
if (p)
printf("\nthe result is:%s\n", p);
fun函数返回值为3,那么为什么输出函数中p会输出*p[3]及之后的字符串呢?
展开
 我来答
帐号已注销
2013-02-04 · TA获得超过2807个赞
知道小有建树答主
回答量:559
采纳率:0%
帮助的人:973万
展开全部
1、fun函数返回值是指针a(一个地址) ,而从
if (*r == '\0')
a = s;
这里可以看出a就是字符串t最后一次出现时的地址。

2、两个p是不同的变量!(知识漏点)
(此程序中)主函数的p有效范围只在主函数,用来接收返回值 p = fun(s, t);
(此程序中)fun函数的p有效范围只在fun函数上,用来接收s的地址并对其内容和t进行比较。

3、printf("\nthe result is:%s\n", p); 因为这里是主函数的p,值等于fun函数返回的指针a,对应%s自然可以输出从a地址开始的字符串。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式