免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1289 | 回复: 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
2 [报告]
发表于 2005-06-29 10:08 |只看该作者

奇怪的输出

不要返回函数中的局部对象。这些对象在函数退出后已经无效了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-06-29 10:09 |只看该作者

奇怪的输出

局部数组是不能return出来的

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2005-06-29 10:12 |只看该作者

奇怪的输出

你能有输出已经不错了.~
p1,p2 都指向一个栈上的地址.这两个栈在函数char *p1()和char *p2()消亡的时候已经就消亡了.

我的理解.

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

奇怪的输出

[quote]原帖由 "yuxh"]局部数组是不能return出来的[/quote 发表:


这个程序调试的时候肯定会有警告的。警告上说的很清楚。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-06-29 10:18 |只看该作者

奇怪的输出

>;>;这个程序调试的时候肯定会有警告的。警告上说的很清楚。

我的没有警告.~返回指针是合法的.编译器没深入的检查返回的指针的指向.

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

奇怪的输出

p2()覆盖了p1()

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

奇怪的输出

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

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

奇怪的输出

过了生命期,传指针不行

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

奇怪的输出

vc return 局部变量会警告。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP