结果为什么不是1111?

lwy123 2010-04-12 02:11:18
#include "stdafx.h"
#include "iostream"

char* test()
{
char a[]="1111";
return a;
}

int _tmain(int argc, _TCHAR* argv[])
{
char *p=NULL;
p=test();

printf("%s",p);
return 0;
}

...全文
98 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqlclj 2010-04-12
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ubuntulover 的回复:]

永远不要返回指向局部变量的指针
[/Quote]

+1
阿磊2013 2010-04-12
  • 打赏
  • 举报
回复
永远不要返回指向局部变量的指针
aozhi 2010-04-12
  • 打赏
  • 举报
回复
return后已经基址寄存器中保存的已经不再是这个堆栈段的段地址了。自然取不到这个段中的数据了。
hacker1125 2010-04-12
  • 打赏
  • 举报
回复
不能返回栈空间。
char* test()
{
char a[]="1111";//栈内容
return a;//a为局部变量,11111存在栈里面,这个函数结束,1111页就消失了。所谓获取到的是不确定的值
itxuls 2010-04-12
  • 打赏
  • 举报
回复
哎。。 学习中。。。
jogger007 2010-04-12
  • 打赏
  • 举报
回复
局部普通变量是放在栈里的,当你该函数执行完毕就会被系统回收。
所以返回地址指向不可预见的内容
OVER
cy330206 2010-04-12
  • 打赏
  • 举报
回复
楼主把数组声明在主函数里面就可以了,
因为函数开始的时候可以分配一定的内存,但是函数结束后,他里面声明的所有的变量都会被销毁
senr0816 2010-04-12
  • 打赏
  • 举报
回复
因为你返回的是数组a[]="1111"的首地址,而a[]的范围仅限于函数内,函数运行结束后数组所占内存即被释放
天亮后说晚安 2010-04-12
  • 打赏
  • 举报
回复
正解
[Quote=引用 2 楼 bitxinhai 的回复:]
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
[/Quote]
honemay 2010-04-12
  • 打赏
  • 举报
回复
因为a是在函数里分配的,是局部变量,你的函数返回的是a的地址
你p= test(),p指向的那块内存在test()函数销毁时也被释放了
所以你打印出来的是一些不定的东西

可以改成char* a = new char[10];
strcpy(a, "1111");
不过在p =test()后,要 delete p;
bitxinhai 2010-04-12
  • 打赏
  • 举报
回复
char* test()
{
char a[]="1111";
return a;//a为局部变量,函数退出的时候,该变量就会失效,不能保证返回的数据是"1111"
}
ArmStronger 2010-04-12
  • 打赏
  • 举报
回复
a被释放了,加个static就好了

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧