CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

找错。

楼主zzjb(C就一个字,我只说一次)2006-03-12 23:03:50 在 C/C++ / C语言 提问

#include   <stdio.h>  
  char   *RetMemory(void)  
  {  
                char   p[]   =   "hellow   world";  
                return   p;  
  }  
   
  void   main(void)  
  {  
                char   *str   =   NULL;  
                str   =   RetMemory();  
                printf(str);  
  }  
   
  请问以上程序的错误在哪里? 问题点数:20、回复次数:16Top

1 楼1982pc()回复于 2006-03-12 23:36:20 得分 5

返回的是指向“栈内存”的指针,该指针的地址不是   NULL,但其原现的内容已经被清除,新内容不可知。Top

2 楼windyloft(大后天)回复于 2006-03-13 09:11:18 得分 3

char   p[]   =   "hellow   world";  
  是局部变量,当函数返回后,p就不可用了  
  改为  
  static   p[]   =   "hello   word";Top

3 楼theory88(伟)回复于 2006-03-13 09:28:40 得分 3

p[]为局部变量,当从函数RetMemory返回时,p[]被释放...  
  可改为  
                static   char   p[]   =   "hellow   world";Top

4 楼jinjiajie(leorio)回复于 2006-03-13 09:38:01 得分 0

以上已经很好的回答了该问题了Top

5 楼chenzhiyubuaa()回复于 2006-03-13 11:26:38 得分 0

改成char*   p   =   "hello   world";   也可以Top

6 楼zzjb(C就一个字,我只说一次)回复于 2006-03-13 12:36:17 得分 0

为什么char*   p   =   "hello   world";   也可以呢?Top

7 楼web_php(C#C++_PHPMYSQL_ASP)回复于 2006-03-13 18:26:20 得分 0

char   p[]   =   "hellow   world";  
  是局部变量,当函数返回后,p就不可用了  
  改为  
  static   p[]   =   "hello   word";  
   
  --------------------------------------------------  
   
  赞成Top

8 楼web_php(C#C++_PHPMYSQL_ASP)回复于 2006-03-13 18:27:32 得分 0

掌握好全局变量个局部变量的用法,这方面经常容易犯错。Top

9 楼MagicCarmack(MagiC++)回复于 2006-03-13 18:32:28 得分 0

高质量C++编程里讲了很多这方面的东东Top

10 楼chenzhiyubuaa()回复于 2006-03-13 20:41:06 得分 5

为什么char*   p   =   "hello   world";   也可以呢?  
  ------------------------------------------  
  "hello   world'的存储空间是程序开始执行以前就分配好了的,*p只是指向它,函数返回后,str也指向"hello   world"Top

11 楼anguofeng(我不爱这个政府,但是我爱这个民族,努力离开中国)回复于 2006-03-13 22:11:35 得分 2

返回局部变量的指针  
  局部变量在函数结束后就会被销毁  
  所以返回他的局部变量是不可以的  
  可以将局部变量定义为static类型的。Top

12 楼systemx(-操!老子从不讲脏话的!阿弥陀佛!-)回复于 2006-03-14 10:22:17 得分 0

学习了一下Top

13 楼ytfrdfiw()回复于 2006-03-14 11:53:37 得分 2

改为static只是将局部变量的存储类型改为静态(全局),它在编译阶段一次初始化,永不在初始化,勿忘。但它的作用域仍在函数体内。改变存储类型不会改变变量的作用域。Top

14 楼ytfrdfiw()回复于 2006-03-14 11:58:09 得分 0

同样,char   *p=   "skdk".也是在编译时刻安排好存储空间了,它在全局区,所以copy时有效。Top

15 楼xiaohuoma7620(小火马)回复于 2006-03-14 14:37:13 得分 0

多谢,我以前一直以为char*   p   =   "hello   world";   不行,现在知道了Top

16 楼wumingchenchao(一缕阳光)回复于 2006-03-16 21:21:08 得分 0

学习了。Top

相关问题

  • 找错
  • 找错
  • 找错。
  • 找错
  • 找错。。。
  • 找错。
  • 找错
  • 找错
  • 找错误啦~
  • 找找错

关键词

  • 函数
  • 指针
  • 局部变量
  • retmemory
  • hellow
  • 返回
  • 存储
  • world
  • 全局
  • 指向

得分解答快速导航

  • 帖主:zzjb
  • 1982pc
  • windyloft
  • theory88
  • chenzhiyubuaa
  • anguofeng
  • ytfrdfiw

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo