函数返回数组问题

xyh20120214 2019-04-22 11:09:59
下面这段代码为何可以正确输出呢?局部变量在退出函数后不是会被清空吗?
#include "stdio.h"
char* throwMesinfo()
{
char buf[1024] ="bac";
return buf;
}
int main()
{
char *p = NULL;
p = throwMesinfo();
printf("%s\n",p);
return 0;
}
...全文
319 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
morning-glory 2019-04-25
  • 打赏
  • 举报
回复
3楼说错了,char buf[1024] = "bac" 是放在栈里的,char *buf = "bac"才是放在常量区。
morning-glory 2019-04-25
  • 打赏
  • 举报
回复
2楼的意思是,局部变量的释放,只是把内存空间标记为未使用,但内容还在;这块内存空间被标记为未使用后,随时可能被系统拿去用并改变其内容,比如第二个函数throwMesinfo2(),这时输出p会得到不可预料的结果。
zgl7903 2019-04-22
  • 打赏
  • 举报
回复
那是因为你的程序后面没有其它函数使用栈空间 再试试下面的程序看看

char* throwMesinfo()
{	
char buf[1024] ="bac";
return buf;
}

char* throwMesinfo2()
{	
  char buf[1024] ="xxxxxbac";
  return buf;
}

int main()
{
  char *p = NULL;
  p = throwMesinfo();
  throwMesinfo2();
  printf("%s\n",p);
  return 0;
}
Xu_Xiaoping 2019-04-22
  • 打赏
  • 举报
回复
引用 楼主 xyh20120214的回复:
下面这段代码为何可以正确输出呢?局部变量在退出函数后不是会被清空吗?
#include "stdio.h"
char* throwMesinfo()
{
char buf[1024] ="bac";
return buf;
}
int main()
{
char *p = NULL;
p = throwMesinfo();
printf("%s\n",p);
return 0;
}
你是将函数throw Mesinfo的返回值赋值给了p
天外怪魔 2019-04-22
  • 打赏
  • 举报
回复
char buf[1024] ="bac";
这个"bac"是存储在常量区的,不归本地栈管。 throwMesinfo只是返回了该常量区的指针,当然可以正常使用了。

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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