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