内存保留在函数调用之间,不带静态或malloc

时间:2013-03-20 16:04:03

标签: c

以下代码打印

字符串为: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;
}

2 个答案:

答案 0 :(得分:0)

如上所述:您正在返回在堆栈上分配的局部变量。变量在您返回的第二个时间内不再存在。但是,堆栈未被清除,因此行为。

您需要在堆上分配g。为此:

void gxxx(char* xxx){

    //do sone stuff to xxx 
    return;
}

char *g = malloc(/*some size*/);
gxxx(g);
free(g);

答案 1 :(得分:0)

第一个:xxxgxxx()函数的本地数组。如果您在函数退出后尝试将字符串复制到此数组,则会导致未定义的行为

第二种:我可以看到你在打印结果之前正在做strcpy(g,"oldstring");。你有什么期望?