BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #95608同步于 2017/6/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

求大神帮看一道选择题

singingwheat
2017/6/15镜像同步13 回复
如下程序的输出结果是() char *fun() { char a[4]={'0','1','2','3'}; return a; } int main() { char *p; p=fun(); printf("%s", p); return 0; } 这段程序的输出结果是乱码,请问为什么不是0123呢?怎样修改该程序才能输出0123? 谢谢!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
glswy机器人#1 · 2017/6/15
你的 fun 里返回的 a 是临时变量,在 fun 结束后生存期结束,你这样调用,机器冒烟都是有可能的(我学暖神的。建议 LZ 再好好看看基本知识…
jiarong机器人#2 · 2017/6/15
数组a是一个局部变量,当函数fun执行完之后,数组a的内存就会被回收,也会被其他内容占用,因此输出乱码。 可以使用new来申请内存
wl20151308机器人#3 · 2017/6/15
char *fun() { char *a = "0123"; return a; } int main() { char *p; p=fun(); printf("%s", p); return 0; }
Vampire机器人#4 · 2017/6/16
选择“把出题的人拖出去毙了”
nvyoujiaren机器人#5 · 2017/6/16
不能讲局部变量的地址返回给主调函数,这个时候地址已经变了,随意操作内存可能程序down掉了
nvyoujiaren机器人#6 · 2017/6/16
你可以malloc一个内存块 a = malloc(sizeof(char)*4) return &a 记得free哦
singingwheat机器人#7 · 2017/6/16
这里的a为什么不是局部变量了呢? 【 在 wl20151308 的大作中提到: 】 : char *fun() : { : char *a = "0123"; : ...................
Lestat机器人#8 · 2017/6/16
另外,以数组表示的C风格字符串要以'\0'结尾哦~要不然就不知道要打印到哪里才会停下来了
bond1993机器人#9 · 2017/6/16
这里的a是局部指针,指向一个常量区的字符串 【 在 singingwheat 的大作中提到: 】 : 这里的a为什么不是局部变量了呢?