下面的代码打印
字符串是: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;
}
下面的代码打印
字符串是: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;
}
如前所述:您正在返回在堆栈上分配的局部变量。在您返回的那一刻,该变量将不复存在。但是堆栈没有被清除,因此行为。
您需要g
在堆上分配。为此:
void gxxx(char* xxx){
//do sone stuff to xxx
return;
}
char *g = malloc(/*some size*/);
gxxx(g);
free(g);
第一个:xxx
是gxxx()
函数的本地数组。如果您在函数退出后尝试将字符串复制到此数组,则会导致未定义的行为。
第二个:正如我所见,您strcpy(g,"oldstring");
在打印结果之前正在做的事情。你期待什么?