我有一个功能
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改变了?
可能是因为你buffer超出了范围.你不能"坚持"局部变量的地址,一旦它们超出范围,地址就变得无效.
正如一堆恼火的评论所表明的,如果没有看到你的代码,这是不可能真正回答的.希望你应该明白这一点,否则你在这里期待着魔力.
要分配与任何范围无关的内存,请使用在堆上分配malloc().