空指针要怎样进行赋值!求解释,详细点.非常感谢!!!

#include <iostream>
using namespace std;
char *GetMomery(void)
{
char p[]="hello world!";
return p;
}
int main()
{
char *str=NULL;
str=GetMomery();
cout<<str;
return 0;
}
不能正常输出,空指针直接这样赋值不行吗?是因为没有分配到内存的原因,才导致运行失败的吗!非常不理解!!!

兄弟,空指针赋值没问题。
只是你GetMomery函数返回的是一个无效指针。
char p[] = ''hello world';这个数组在GetMomery函数结束后被释放。所以会出错。
要不你就用malloc (要记得释放) 要不就把 p 数组声明会全局的,
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-19
char p[]="hello world!" 这个字符串是动态申请的,这块内存的生存域仅在这个函数中。
这个函数一旦返回,这块内存将被释放,所以str=GetMomery()取不到这个字符串。

如果把这个字符串的内存“固定”住,就可以输出了,这样做:
static char p[]="hello world!";
第2个回答  2012-11-19
char *p="hello world!"就行了
p是局部变量,return以后内容就没了,虽然地址返回了,但地址的内容是垃圾
第3个回答  2012-11-19
char p[]="hello world!";的内存在函数调用后就没了,所以在用指针输出就会错了。追问

能详细点吗!还是理解!

本回答被网友采纳
第4个回答  2012-11-19
p是字符数组,str=GetMomery();得到的是p数组的首地址,cout<<str;这句话输出只能输出p中的第一个字符,要用循环才能完整输出。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网