2012-03-09 4 views
0

У меняЗапись типа 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; если у меня есть IE 7 в Len в то время как 4 должно быть, так как SizeOf (DWORD) = 4

+2

Только 1 байт присваивается '** buf', потому что это все, что он может удерживать. –

+0

О, я так слеп :(, спасибо. Поместите его в качестве ответа, я закрою вопрос. –

ответ

1

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

1

Исправление:

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

с ++ автоматически литейная LEN к полукокса, так это то, что *buf есть.

0

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

char** buf 

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

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^