今天,我遇到了以下代码块:
#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;
}
乍一看,我认为两个输出都将损坏,但是令人惊讶的是,第一个输出是“测试”,而第二个输出是损坏。有人可以告诉我为什么吗?
最佳答案
他们和都已损坏。仅仅因为它似乎可以工作,并不意味着就可以了。
这是未定义的行为,任何事情都可能发生,包括工作正常。