为什么这个简单的代码会返回垃圾?
char *output()
{
char o[2] = "A";
return o;
}
int main()
{
std::cout << output();
}
为什么这个简单的代码会返回垃圾?
char *output()
{
char o[2] = "A";
return o;
}
int main()
{
std::cout << output();
}
因为你返回一个指向无效内存的指针——返回o
时被破坏output
。
你有几个选择:
malloc
),复制"A"
到这个内存并返回它的地址return "A";
PS当然,你可以使用std::string
,你不会有这个问题。或使用输入/输出参数,而不是返回。
o 是的局部变量,output()
因此它仅在函数内部具有作用域和生命周期。并且当函数返回一个内存地址时,它被删除的内存地址被返回。
如果它是返回的值,则由于“按值返回”方法,程序将可以工作。
如果您需要正确的输出而不是默认内存说明符,则auto
需要使用其他东西,例如内存分配static
或extern
动态内存分配。