返回一个本地char数组为什么strcpy工作但字符串构造函数失败?

时间:2012-03-27 11:26:51

标签: c++

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

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

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

1 个答案:

答案 0 :(得分:6)

他们 都是腐败的。仅仅因为它似乎有效,并不意味着它没问题。

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