【发布时间】:2018-03-13 16:10:22
【问题描述】:
我有以下 C++ 代码:
std::string test = "ABC";
char buffer[30];
for (int i = 0; i < 30; i++)
buffer[i] = 0;
strcpy_s(buffer, 30, test.c_str());
运行后,我希望buffer 是:
[0x41, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00, ... 0x00] 直到它的末尾(第 29 位)。
在 VS2012 中运行,我得到以下结果:
[0x41, 0x42, 0x43, 0x00, 0xFE, 0xFE, 0xFE, ... 0xFE]
为什么 strcpy_s 复制的字符串长度超过了我的字符串长度 (3 chars + \0) ? 0xFE 来自哪里?
【问题讨论】:
-
...它可能会使用未指定的值破坏目标数组的其余部分... 语法 2) en.cppreference.com/w/c/string/byte/strcpy