c ++ memcpy错误

时间:2012-07-09 13:32:56

标签: 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之间发生了变化)

感谢。

2 个答案:

答案 0 :(得分:8)

你已经把位和字节混为一谈,并且正在重写和覆盖大部分内存!

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倍的数据。

答案 1 :(得分:2)

memcpy测量大小(以字节为单位),而不是位。它应该是:

memcpy(buf, &a, 4);
memcpy(buf + 4, &b, 4);
memcpy(buf + 8, &c, 2);
memcpy(buf + 10, &d, 2);
memcpy(buf + 12, &e, 1);