-3

下面的代码打印

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

2 回答 2

0

如前所述:您正在返回在堆栈上分配的局部变量。在您返回的那一刻,该变量将不复存在。但是堆栈没有被清除,因此行为。

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

void gxxx(char* xxx){

    //do sone stuff to xxx 
    return;
}

char *g = malloc(/*some size*/);
gxxx(g);
free(g);
于 2013-03-20T16:12:40.857 回答
0

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

第二个:正如我所见,您strcpy(g,"oldstring");在打印结果之前正在做的事情。你期待什么?

于 2013-03-20T16:14:18.793 回答