c语言 指针输出的内容第一次错误但是后面的正确

在做指针实验的时候写了个小程序,用函数把2个字符串连接返回输出。但是我运行以后第一次输出的内容一直是错的,调试的时候看到指针的内容却明明是对是,也就是说输出的和他实际的内... 在做指针实验的时候写了个小程序,用函数把2个字符串连接返回输出。
但是我运行以后第一次输出的内容一直是错的,调试的时候看到指针的内容却明明是对是,也就是说输出的和他实际的内容有出入
然后多组实验数据,却发现后面几组数据输出又是对的
求大牛解答,以下是代码
#include <stdio.h>
#include <string.h>
char *F(char a[], char b[])
{
char *p;
char c[100];
strcpy(c, a);
strcat(c, b);
p = c;
return p;
}
int main()
{
int T;
char a[100], b[100];
char *q;
scanf("%d", &T);
while(T--)
{
scanf("%s %s", a, b);
q = F(a, b);
printf("%s\n", q);
}
return 0;
}
展开
 我来答
郁草小沙弥
2012-09-01 · TA获得超过484个赞
知道小有建树答主
回答量:203
采纳率:66%
帮助的人:52.9万
展开全部
F函数里的数组c[100]是函数F的局部变量,当函数调用结束之后,数组c[100]就被释放掉了,你的返回值p是数组c的地址,也就是说主函数想要拿到数组c的地址然后使用数组c,因为数组c身为局部变量被释放掉,其他程序就可以随时使用数组c原本所在的内存空间了,所以结果具有随机性,时对时错,当然,只有正好没有其他程序使用数组c原本所在的内存空间时才会出现结果正确,实际上是巧合了。
你可以把数组c的定义放在所有函数之外,定义为全局变量,这样即使函数F结束了,数组c也不会被释放掉。这些是变量生存周期的知识,建议你再找找资料更多的学一下。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式