首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

栈 返回,该如何处理

2012-06-01 
栈 返回char *fun(){char a[5]abcdchar b[5]strcpy(b,a)return b}这样为什么不行?局部变量用完销毁

栈 返回
char *fun()
{
char a[5]="abcd";
char b[5];

strcpy(b,a);

return b;
}
这样为什么不行?局部变量用完销毁,但是我再定义一个char *p,p=b;再return p为什么没有问题了?不都是在站上吗

[解决办法]
因为这是一个巧合. 
而且,不是用完销毁,是用完之后,被系统回收.
至于之后发生什么,你的代码已经无法控制, 之后可能说明:"一切皆有可能".
所以,不要吃惊
[解决办法]
你返回了一个不再受你控制的地址,那里面究竟有会什么内容你是无法去干涉的。

先把它传递给p只是骗过了编译器,但事情的本质没有发生改变,你返回的仍旧是个不可依赖的位置。

热点排行