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

C++ 将DWORD写入内存只会覆盖1个字节,而不是4个字节,c++,overwrite,dword,C++,Overwrite,Dword,我有 此代码,在**buf=len中仅覆盖1个字节如果我的长度为7,而长度为4,因为sizeof(DWORD)=4 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;

我有

此代码,在
**buf=len中仅覆盖1个字节如果我的长度为7,而长度为4,因为sizeof(DWORD)=4

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;
}

C++自动将len强制转换为char,因为这就是
*buf
的含义。

因为
buf
char**
**buf
char
。它只能保存一个字节。因此,只向其写入一个字节。

您拥有该参数

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

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

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

只有1个字节被分配给
**buf
,因为这就是它所能容纳的。哦,我太瞎了:(,谢谢。把它作为答案贴出来,我将结束这个问题。
char** buf