#include <iostream>
using namespace std;
char *GetString(void)
{
char p[] = "hello world";
return p; // 编译器将提出警告
}
void main()
{
char *str = NULL;
str = GetString(); // str 的内容是垃圾
cout<<*str<< endl;
system("pause");
}
今天测试了下发现输出h,*(str+1)输出e
我不理解啊,不是说str的内容是垃圾吗?
是万恶的编译器优化了还是我个人理解深度不够,求各位指教,谢谢!
------解决方案--------------------------------------------------------
内容还没被覆盖
------解决方案--------------------------------------------------------
#include <iostream>
using namespace std;
char *GetString(void)
{
char p[] = "hello world";
return p; // 编译器将提出警告
}
void foo(void)//加个函数进去。
{
char p[] = "edit char";
}
void main()
{
char *str = NULL;
str = GetString(); // str 的内容是垃圾
foo();//加个函数进去。
cout<<*str<< endl;
system("pause");
}
和时间没直接关联,因为栈没给覆盖。vs2008下debug模式,会输出e。但release模式,会优化掉foo()函数,也会显示h。