Извиняюсь за С. Есть структура: #pragma pack(push,1) typedef struct str { USHORT str1; USHORT str2; ULONG str3; ... }*pstr; #pragma pack (pop) pMem — какой-то адрес в памяти. pstr mystr = (pstr)pMem; mystr->str3 оказывается равен не 4 байтам ,следущими за str2,a 4 байтам отстающими от str2 на 4 байта. Что нужно сделать, чтоб они шли по порядку, Заранее спасибо.
electron Какой компилятор? Пробовал код Код (Text): #include <windows.h> #include <stdio.h> #pragma pack(push,1) typedef struct { USHORT s1; USHORT s2; ULONG s3; BYTE s4; } str; #pragma pack (pop) int main(void) { str s; printf("\n" "sizeof(s) = %u\n" "offset s.s1 = %u sizeof(s.s1) = %u\n" "offset s.s2 = %u sizeof(s.s2) = %u\n" "offset s.s3 = %u sizeof(s.s3) = %u\n" "offset s.s4 = %u sizeof(s.s4) = %u\n", sizeof(s), FIELD_OFFSET(str, s1), sizeof(s.s1), FIELD_OFFSET(str, s2), sizeof(s.s2), FIELD_OFFSET(str, s3), sizeof(s.s3), FIELD_OFFSET(str, s4), sizeof(s.s4)); return 0; } на MS C/C++ v13.10.3077 и Intel С/С++ v8.1.025. В обеих случаях получил Код (Text): sizeof(s) = 9 offset s.s1 = 0 sizeof(s.s1) = 2 offset s.s2 = 2 sizeof(s.s2) = 2 offset s.s3 = 4 sizeof(s.s3) = 4 offset s.s4 = 8 sizeof(s.s4) = 1