今天,我遇到了以下代码块:

#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;
}

乍一看,我认为两个输出都将损坏,但是令人惊讶的是,第一个输出是“测试”,而第二个输出是损坏。有人可以告诉我为什么吗?

最佳答案

他们都已损坏。仅仅因为它似乎可以工作,并不意味着就可以了。

这是未定义的行为,任何事情都可能发生,包括工作正常。

08-16 21:38