【问题标题】:strcpy_s copying more than string length to target buffer (filling with 0xFE) [duplicate]strcpy_s 将超过字符串长度复制到目标缓冲区(用 0xFE 填充)[重复]
【发布时间】: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 来自哪里?

【问题讨论】:

标签: c++ strcpy


【解决方案1】:

这是strcpy_s允许的:

strcpy_s 允许从写入的最后一个字符到destsz 破坏目标数组以提高效率:它可以复制多字节块,然后检查空字节。

【讨论】:

  • 多么详细!我会尝试其他方法...谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
  • 2012-08-15
  • 2012-07-17
  • 1970-01-01
  • 2020-04-27
  • 2015-10-29
  • 1970-01-01
相关资源
最近更新 更多