以下代码打印
字符串为:oldstring
我不明白为什么?
#include<stdio.h>
char *func(){
char str[1024];
return str;
}
int main()
{
char *g="string";
strcpy(func(),g);
g = func();
strcpy(g,"oldstring");
printf("The string is : %s",func());
return 0;
}
答案 0 :(得分:0)
如上所述:您正在返回在堆栈上分配的局部变量。变量在您返回的第二个时间内不再存在。但是,堆栈未被清除,因此行为。
您需要在堆上分配g
。为此:
void gxxx(char* xxx){
//do sone stuff to xxx
return;
}
char *g = malloc(/*some size*/);
gxxx(g);
free(g);
答案 1 :(得分:0)
第一个:xxx
是gxxx()
函数的本地数组。如果您在函数退出后尝试将字符串复制到此数组,则会导致未定义的行为。
第二种:我可以看到你在打印结果之前正在做strcpy(g,"oldstring");
。你有什么期望?