找错。
#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




