如下代码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 应该等于一些 垃圾字符 才对
{
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 应该等于一些 垃圾字符 才对
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指向的字符串变了
{
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";