今天我遇到了以下代码块:
#include <iostream>
using namespace std;
char *return_char_array(const char *cptr)
{
char charArray[100] = {0};
strcpy(charArray, cptr);
return charArray;
}
int main()
{
const char *cptr = "test";
char localCharArray[100] = {0};
strcpy(localCharArray, return_char_array(cptr)); // output "test"
cout<<localCharArray<<endl;
string s = return_char_array(cptr); // corrupt output
cout<<s<<endl;
return 0;
}
乍一看,我认为输出都会损坏,但令人惊讶的是第一个输出是“测试”,而第二个输出是腐败。有人会告诉我为什么吗?
答案 0 :(得分:6)
他们 都是腐败的。仅仅因为它似乎有效,并不意味着它没问题。
这是未定义的行为,任何事情都可能发生,包括似乎正常工作。