Запись DWORD в память перезаписывает только 1 байт вместо 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;
}
Этот код, и только 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)
на мой взгляд, это не имеет никакого значения.
Не связан с StackOverflow