免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1290 | 回复: 15
打印 上一主题 下一主题

奇怪的输出 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-29 10:04 |只看该作者 |正序浏览
看下面一个简单的代码:

  1. #include <stdio.h>;

  2. char *p1(){
  3.         char hello1[] = "Hello, MyBaby";
  4.         char *p;
  5.         p = hello1;
  6.         return p;
  7. }

  8. char *p2(){
  9.         char hello[] = "hello, MyLove";
  10.         char *p;
  11.         p = hello;
  12.         return p;
  13. }

  14. int main(int argc, char* argv[]){
  15.         char *pp1 = NULL;
  16.         char *pp2 = NULL;

  17.         pp1 = p1();
  18.         pp2 = p2();

  19.         printf("p1=%s\n", pp1);
  20.         printf("p2=%s\n", pp2);
  21. }
复制代码

从程序来看,应该输出的是:
p1=Hello, MyBaby
p2=hello, MyLove
但是编译后执行,得到的结果是:
p1=hello, MyLove
p2=hello, MyLove
为什么会这样????
各位XDJM有好的解释没有?

论坛徽章:
0
16 [报告]
发表于 2005-06-29 16:31 |只看该作者

奇怪的输出

或者是用char* 代替char[]

论坛徽章:
0
15 [报告]
发表于 2005-06-29 16:29 |只看该作者

奇怪的输出

把数组放到全局即可解决问题.

论坛徽章:
0
14 [报告]
发表于 2005-06-29 16:27 |只看该作者

奇怪的输出

能输出结果已经是奇迹了,局部数组不能被返回

论坛徽章:
0
13 [报告]
发表于 2005-06-29 15:58 |只看该作者

奇怪的输出

原帖由 "zhaofei1318"]vc return 局部变量会警告。[/quote 发表:

不知zhaofei1318试过没有,我试了WIN2000+VC6.0下没警告。输出结果为:
[quote]p1=hell
p2=
Press any key to continue

论坛徽章:
0
12 [报告]
发表于 2005-06-29 15:24 |只看该作者

奇怪的输出

static定义的变量在code段,其生存期在进程结束前一直有效。

论坛徽章:
0
11 [报告]
发表于 2005-06-29 11:53 |只看该作者

奇怪的输出

看来是p1()和p2()返回时所指向的内容已经发生变化。我在给函数内部的数组加了static后已经正常,
  1. char *p1(){
  2.         static char hello1[] = "Hello, MyBaby";
  3.         char *p;
  4.         p = hello1;
  5.         return p;
  6. }

  7. char *p2(){
  8.         static char hello[] = "hello, MyLove";
  9.         char *p;
  10.         p = hello;
  11.         return p;
  12. }
复制代码

想必是static定义的变量不存在函数的栈内,所以函数返回时销毁栈并没有改变static变量的值.

谢谢各位提醒指教,多谢多谢!!

论坛徽章:
0
10 [报告]
发表于 2005-06-29 11:00 |只看该作者

奇怪的输出

vc return 局部变量会警告。

论坛徽章:
0
9 [报告]
发表于 2005-06-29 10:24 |只看该作者

奇怪的输出

过了生命期,传指针不行

论坛徽章:
0
8 [报告]
发表于 2005-06-29 10:23 |只看该作者

奇怪的输出

gcc 3.2.3无警告,不过没楼主好运,输出一堆乱码 
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP