2:不能返回以局部变量方式创建的字符串数组首地址
#include <stdio.h>
char *returnStr()
{
char p[]="hello world!";
return p;
}
int main()
{
char *str;
str=returnStr();
printf("%s\n", str);
return 0;
}
"hello world!"是局部变量存放在栈中。当returnStr函数退出时,栈要清空,局部变量的内存也被清空了,所以这时的函数返回的是一个已被释放的内存地址,所以有可能打印出来的是乱码。
但是
如果按下面这样改一下就ok,不知道为什么
#include <stdio.h>
char *returnStr()
{
char p[]="hello world!";
printf("in function address:%p \n", p);
char *d = p;
return d;
}
int main()
{
char *str;
str=returnStr();
printf("%p\n", str);
printf("%s\n", str);
return 0;
}
输出:
in function address:0x7ffd0309f44b
0x7ffd0309f44b
有时候是会输出hello world!
的,可能是栈区内存还未释放。