C String改变了

lil*_*lzz -1 c

我有一个功能

char *func1(char *buffer);
Run Code Online (Sandbox Code Playgroud)

这个函数有一个缓冲区.

char buffer[10]={'\0'};
Run Code Online (Sandbox Code Playgroud)

buffer被传递给函数并从函数中获得结果并从函数返回.

所以,当Main函数调用func1时

char *result=func1(buffer);
Run Code Online (Sandbox Code Playgroud)

所以当我打印结果时,它会给出一个有效的结果..

 printf("The final result is %s", result);
Run Code Online (Sandbox Code Playgroud)

但是,在这行代码之后

   s = socket(AF_INET,SOCK_DGRAM,0);
Run Code Online (Sandbox Code Playgroud)

我再次打印结果

   printf("The final result is %s", result);
Run Code Online (Sandbox Code Playgroud)

这次它给出了不同的结果.

我想知道为什么char * result改变了?

unw*_*ind 6

可能是因为你buffer超出了范围.你不能"坚持"局部变量的地址,一旦它们超出范围,地址就变得无效.

正如一堆恼火的评论所表明的,如果没有看到你的代码,这是不可能真正回答的.希望你应该明白这一点,否则你在这里期待着魔力.

要分配与任何范围无关的内存,请使用在堆上分配malloc().