This question already has answers here:
How can I prevent strncpy_s from padding destination buffer in debug build?
(2个答案)
去年关闭。
我有以下C ++代码:
运行它之后,我希望
在VS2012中运行,我得到以下结果:
为什么
(2个答案)
去年关闭。
我有以下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个字符+ \ 0)? 0xFE
是从哪里来的? 最佳答案
这由strcpy_s
允许:
为了提高效率,允许strcpy_s
从写入的最后一个字符到destsz
破坏目标数组:它可以复制为多字节块,然后检查空字节。
关于c++ - strcpy_s将超过字符串长度的内容复制到目标缓冲区(用0xFE填充),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49260844/
10-11 04:29