将DWORD写入内存只覆盖1个字节,而不是4个字节

Writing DWORD to memory overwrites only 1 byte instead of 4

本文关键字:字节 4个 1个 覆盖 DWORD 内存      更新时间:2023-10-16

我有

typedef unsigned int DWORD;
void write_str(string str, char** buf) {
    DWORD len = str.size();
    **buf = len;
    *buf += sizeof(len);
    memcpy(*buf, str.c_str(), len);
    *buf += len;
}

这段代码,如果我在len中有7,则只有1个字节被覆盖在**buf = len;中,而4应该是,因为(DWORD)的大小=4

由于bufchar ****bufchar。它只能容纳一个字节。因此,只向其中写入一个字节。

修复:

DWORD *tmpptr(*buf);
*tmpptr = len;

C++自动将len转换为char,因为*buf就是这样。

您有参数

char** buf

这意味着**buf是一个字符,很可能是一个单字节。

1个字节被覆盖,因为目标类型是char(**buf的类型是char)。这是正确的。但在我看来,*buf += sizeof(len)这个词没有任何意义。