返回值为字符串的函数

char *GetMemory()
{
char p[] = "hello world";
return p;
}
void main()
{
char *str = NULL;
str = GetMemory();
printf(str);
}
打印结果为乱码,但是改为下面就可以正常输出:
char *GetMemory(char *sssss)
{
char p[] = "hello world";
return p;
}
void main()
{
char *str = NULL;
char *s="111111111\n";
str = GetMemory(s);
printf(str);
}只是跟调用的函数增加了一个参数,一个没有用到的参数,为什么就能正常输出呢?
求解释
知道了:原因在于
char *GetMemory()
{
char p[] = "hello world";--》此处不能使用数组,应改为char *p然后分配空间
return p;
}
数组是分配的栈内存,在函数结束时,会被销毁,所以就乱码了,改为字符指针就不会出现这个问题了

函数返回的只是一个局部指针,它只在函数GetMemory() 内有效,此函数一结束,变量p的地址就无效了,所以打印的结果就是乱码。

要想正确的结果可以这样
char *GetMemory(char *sssss)
{
strcpy(sssss,"hello world");
return sssss;
}

其实你的这2个函数像1楼说的都不稳定,返回的结果都不确定,看到所谓"正常输出", 真的只是运气好
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-20
这两种方法都不是稳定的函数, 结果不确定.
你后者能看到所谓"正常输出", 只是运气好
相似回答