2
今天我遇到了下面的代码块:当返回一个本地字符数组为什么strcpy工作,但字符串构造函数失败?
#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;
}
当时我还以为这两个输出将被破坏的一见钟情,但令人惊讶的是第一输出为“测试”,而第二个是腐败。有人会告诉我为什么吗?
未定义的行为是未定义的...编辑:实际上,这甚至不会为我编译,因为您给出了'return_char_array()''const char *',并且不能隐式抛弃'const'ness 。但是,我猜这是因为调用'strcpy()'没有在堆栈上放置足够的内存来覆盖特定的内存区域,而创建一个'string'的确如此。 – BoBTFish 2012-03-27 11:28:45
@BoBTFish对不起,我在参数列表中丢失了'const' .. – OriginalWood 2012-03-27 11:34:22
Cure:'std :: string'和其他标准库容器。 – 2012-03-27 11:35:02