C++ memcpy 错误

标签 c++

我想一个接一个地复制 2 个整数、2 个短裤和 1 个字符。

这是我做的:

int32_t a=1;
int32_t b=2;
int16_t c=3;
int16_t d=4;
int8_t e=5;
char*buf=new char[104];
memcpy(buf, &a, 32);
memcpy(buf + 32, &b, 32);
memcpy(buf + 64, &c, 16);
memcpy(buf + 80, &d, 16);
memcpy(buf + 96, &e, 8);

这是正确的吗?我的调试器说第三行影响第二行,但也许我只是误用了我的调试器(更具体地说,它说 *((int32_t*)(buf+32)) 的值在第二个和第三个 memcpy 之间发生了变化) .

谢谢。

最佳答案

您混淆了位和字节,并且正在过度读取和覆盖大部分内存!

int32_t x; /* 4 bytes, 32 bits */
int16_t y; /* 2 bytes, 16 bits */

memcpy(buf            , &x, sizeof(x)); /* copy 4 BYTES, or sizeof(x) */
memcpy(buf + sizeof(x), &y, sizeof(y)); /* copy 2 bytes */

因此,您的缓冲区大约是所需大小的 8 倍,并且每次复制的数据量是所需数据量的 4 倍。

关于C++ memcpy 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396092/

相关文章:

c++ - 使用 boost Spirit 为变量分配默认值

c++ - C 与 C++ 中的 Typedef 结构

c++ - 基本 C++ 计算器

c++ - 如何在c++中创建结构 vector 的映射

c++ - 使用 AWS C++ SDK 时调用 UpdateThing 返回 504 网关超时

c++ - 使用哈希数组对罗密欧与朱丽叶文本进行统计分析。我差了 3684 个字中的 2 个字

c++ - 如何在C++中使用系统功能执行具有多字节字符的命令

c++ - boost python中使用纯虚函数的多个派生类

c++ - 使用迭代器的模板类的构造函数

c++ - C++专业程序员如何实现通用抽象?