【发布时间】:2016-08-07 06:31:15
【问题描述】:
我正在尝试使用 memcpy 复制确切数量的 32 个字符,但是我在正确使用它时遇到问题,因为多个在线 g++ 编译器以及我机器上的编译器使用相同的源给出的结果略有不同代码。
代码:
#include <iostream>
#include <cstring>
int main()
{
const char* source = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec eu ipsum nec elit mattis consequat. Curabitur sollicitudin ligula et quam bibendum euismod.";
char dest[32];
std::memcpy(&dest, source, sizeof(dest));
std::cout << dest << "(" << strlen(dest) << ")";
}
在here (G++4.9.2) 编译的代码。
输出不包含 32 个字符(正在添加垃圾值):
Lorem ipsum dolor sit amet, cons †¿(36)
在here (G++4.9) 编译的代码。
输出包含所需的结果:
Lorem ipsum dolor sit amet, cons(32)
我机器上的输出类似于第一个输出(36 个字符)。
为什么每个结果都不同?
memcpy 复制 n 个字符的有效用法应该是什么?
【问题讨论】:
-
你对
memcpy的使用是正确的,但是判断其结果的方法是错误的。