Запись DWORD в память перезаписывает только 1 байт вместо 4 - PullRequest
0 голосов
/ 09 марта 2012

у меня

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

Ответы [ 4 ]

1 голос
/ 09 марта 2012

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

1 голос
/ 09 марта 2012

Исправлено:

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

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

0 голосов
/ 09 марта 2012

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

0 голосов
/ 09 марта 2012

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

char** buf

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

...