【问题标题】:Writing DWORD to memory overwrites only 1 byte instead of 4将 DWORD 写入内存仅覆盖 1 个字节而不是 4 个
【发布时间】:2012-03-27 01:49:25
【问题描述】:

我有

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 个字节,而 **buf = len; 中只有 1 个字节被覆盖,而应该是 4 个字节,因为 sizeof(DWORD) = 4

【问题讨论】:

  • 只有 1 个字节分配给 **buf,因为这就是它所能容纳的全部。
  • 哦,我太瞎了:(,谢谢。把它作为答案发布,我会结束问题。

标签: c++ overwrite dword


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    修复:

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

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

    【讨论】:

      【解决方案3】:

      你有参数

      char** buf
      

      意思是**buf是一个字符,很可能是一个字节。

      【讨论】:

        【解决方案4】:

        因为bufchar ****bufchar。它只能保存一个字节。因此,只写入一个字节。

        【讨论】:

          猜你喜欢
          • 2021-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多