今天我遇到了以下代码块:
#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;
}
Run Code Online (Sandbox Code Playgroud)
乍一看,我认为输出都会损坏,但令人惊讶的是第一个输出是"测试"而第二个输出是腐败的.有人会告诉我为什么吗?