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;
} 展开
但是我运行以后第一次输出的内容一直是错的,调试的时候看到指针的内容却明明是对是,也就是说输出的和他实际的内容有出入
然后多组实验数据,却发现后面几组数据输出又是对的
求大牛解答,以下是代码
#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;
} 展开
1个回答
展开全部
F函数里的数组c[100]是函数F的局部变量,当函数调用结束之后,数组c[100]就被释放掉了,你的返回值p是数组c的地址,也就是说主函数想要拿到数组c的地址然后使用数组c,因为数组c身为局部变量被释放掉,其他程序就可以随时使用数组c原本所在的内存空间了,所以结果具有随机性,时对时错,当然,只有正好没有其他程序使用数组c原本所在的内存空间时才会出现结果正确,实际上是巧合了。
你可以把数组c的定义放在所有函数之外,定义为全局变量,这样即使函数F结束了,数组c也不会被释放掉。这些是变量生存周期的知识,建议你再找找资料更多的学一下。
你可以把数组c的定义放在所有函数之外,定义为全局变量,这样即使函数F结束了,数组c也不会被释放掉。这些是变量生存周期的知识,建议你再找找资料更多的学一下。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询