69,336
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
char *foo(int *handle)
{
static char str[] = "okay\n";
*handle = 1;
return str;
}
int main(void)
{
//void **handle;
int handle;
char *result;
result = foo(&handle);
if (handle == 1) {
printf("%s", result);
}
return 0;
}
问题1, 使用野指针,handle就是野指针,如果单从你的去求是从函数foo中获取一个标志值,没必要使用二重指针,直接使用一重指针即可.
问题2: 获取栈上的地址;函数foo中str数组是栈上空间,获取其地址,然后在main函数里再次使用没有意义.因为foo函数调用完后栈空间会被自动释放,在使用没有意义,很容易被别的程序再次申请foo的使用过的栈空间.
改的方法:handle使用了变量,str使用了静态数组,因为字符串"oky\n"是在数据段,不会跟着foo的释放而无效,所以main函数也可以读到正确的字符串..