如下代码char *GetString(void)
{
char p[] = "hello world";
return p;
}int main(int argc, char* argv[])
{
char *str = NULL;
str = GetString();
return 0;
}char p[] 字符数组 
char p[] = "hello world" 是在一个栈内存上申请一段临时空间 长度为12 , 
里面放着 hello world\0
在GetString 执行完后 这一段在栈上的临时空间应该释放
也就是说这一段临时内存里不应该再放hello world\0
所以指向这段临时内存的指针里的内容 不应该为"hello world"编译这段代码 系统会出现一个warning 说是 返回一个指向临时内存的指针但是 主程序中执行str=GetString();
str还是等于"hello world" 难道这个临时内存根本就没有释放???我觉得str 应该等于一些 垃圾字符  才对

解决方案 »

  1.   

    空间没有被使用,所以存放的还是原来的字符串,如果你在调用一个其它的函数,
    char *A()
    {
      char p[]="Zi Dong Zhao";
      return p;
    }char *B()
    {
      char p[]="Zi Dong 1";
      return p;
    }main()
    {
      char *p=NULL,*p1=NULL;
      p=A();
      p1=B();
      return 0;
    }
    看看p指向的字符串变了
      

  2.   

    char *GetString(void)
    {
    char p[] = "hello world";
    return p;
    }
    void GetString1(void)
    {
    char p[] = "1111";
    }
    int main(int argc, char* argv[])
    {
    char *str = NULL;
    str = GetString();
    GetString1(); return 0;
    }已经解决 如上  当 调用GetString1()前 Str = "hello world"
    而调用了GetString1()后 , Str="  111";