有关内存的有关问题

有关内存的问题
char*GetMemory(void)
{
char p[]="hello world";
return p;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
}

上面的这个程序是在《高质量程序设计指南》里看到的,题目问的是运行Test函数会有什么样的结果,书上的回答我不是完全看懂了,哪位可以详细讲解一下这道题目,谢谢。
------最佳解决方案--------------------
char*GetMemory(void)
{
char p[]="hello world";//把hello world拷贝到p数组里,它是栈分配的内存,函数结束会被释放
return p;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();//str指向的是已被释放的内存区域,结果将不可知
printf(str);//乱码一堆
}

------其他解决方案--------------------
确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码
char*GetMemory(void)
{
char *q;
char p[]="hello world";
q=p;
return q;
}
void Test(void)
{
char *str=NULL;
str=GetMemory();
printf(str);
}

------其他解决方案--------------------
书上的回答我不是完全看懂了,

哪位可以详细讲解一下这道题目,
------其他解决方案--------------------

char*GetMemory(void)
{
    char *q=new char[20];
    char p[]="hello world";
    q=p;
    return q;
}
void Test(void)
{
    char *str=NULL;
    str=GetMemory();
    printf(str);
    delete[]str;
}

不知道有没有写对
其实2楼已经完美的解答了你的问题

------其他解决方案--------------------
不能返回指向 stack 的指针变量
------其他解决方案--------------------
引用:
确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) {     char *q;     char p[]="hello world";     q=p;     return q; } void Test(void) {     char *str=N……
依然是乱码啊,对吗?
------其他解决方案--------------------
引用:
引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) {     char *q;     char p[]="hello world";     q=p;     return q; ……

把你的完整代码贴出来看看
------其他解决方案--------------------
引用:
引用:引用:确实如楼上所说,不能返回局部变量的地址
你试着编译下下面的代码


C/C++ code?



12345678910111213

char*GetMemory(void) {     char *q;     char p[]="hello world"……
我贴出来的就是书上的完整代码了。
------其他解决方案--------------------
学习了
------其他解决方案--------------------
引用:
C/C++ code?1234567891011char*GetMemory(void){char p[]="hello world";//把hello world拷贝到p数组里,它是栈分配的内存,函数结束会被释放return p;}void Test(void){char *str=NULL;str=GetMemory();//str指向的是已被释放的内存区域,结果将不……