自定义函数内部声明局部变量并返回地址,然后将另外一个变量指向返回地址,char*和char[]为什么结果不同?char*GetMemory(){char*p="hello";returnp;}char*GetMemory(){charp[]="hello";returnp;}上述函数通过printf(%s\n,GetMemory());的返回值分别为:1、hello2、乱码请问这是什么原因?另外,如果我这样写:char*str=NULL;str=GetMemory();是不是错误的?(在别的地方看到的,自己不是很确定)
2 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
char*p="hello";其中的hello字符串是被预编译,存放与data段,是不会被销毁的;charp[]="hello";本质上是charp[6]="hello";这是一个局部变量,过期自动销毁了~
冉冉说
TA贡献1877条经验 获得超1个赞
我按照你的写法,返回的都是正确的,返回hello.代码如下:编译环境gcc(tdm64-2)4.8.1include char*GetMemoryOne(){char*p="hello";returnp;}char*GetMemoryTwo(){charp[]="hello";returnp;}intmain(){printf("%s\n",GetMemoryOne());printf("%s\n",GetMemoryTwo());return0;}
添加回答
举报
0/150
提交
取消