Запись DWORD в память перезаписывает только 1 байт вместо 4

StackOverflow https://stackoverflow.com//questions/9636972

  •  10-12-2019
  •  | 
  •  

Вопрос

У меня есть

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

Этот код, и только 1 байт перезаписывается в **buf = len; если у меня есть, т.е.7 в len, в то время как должно быть 4, поскольку sizeof(DWORD) = 4

Это было полезно?

Решение

Как buf это char **, **buf это char.Он может содержать только один байт.Следовательно, в него записывается только один байт.

Другие советы

Чинить:

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

C++ автоматически преобразует len в char, поскольку это то, что *buf является.

У вас есть параметр

char** buf

Это означает, что **buf это символ, который, скорее всего, представляет собой один байт.

1 байт перезаписывается, поскольку типом назначения является char (тип **buf является символом).Это правильно.Но выражение *buf += sizeof(len) на мой взгляд, это не имеет никакого значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top