看板 C_and_CPP 關於我們 聯絡資訊
遇到的問題: (題意請描述清楚) struct tmp{ unsigned short int a; unsigned int b; }; input: (hex) 11 22 33 44 55 66 77 88 讀檔時,b都會跳過33 44 直接讀 55 66 77 88 FILE* fp; tmp x; fread((void*)&x, sizeof(tmp), 1, fp); 希望得到的正確結果: a:(hex) 11 22 b:(hex) 33 44 55 66 程式跑出來的錯誤結果: a:(hex) 11 22 b:(hex) 55 66 77 88 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) gcc/g++ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.180.12 ※ 編輯: deepking 來自: 140.117.180.12 (12/28 16:26)
oddguy:這是UDT(User Defined Type)的成員對齊問題,小弟大陸這邊 12/28 16:30
oddguy:是這樣稱呼的。簡單來說就是short所占據的2字元空間后面 12/28 16:31
oddguy:編譯器添加了用來跟int型成員對齊的額外的2字元空間(因為 12/28 16:32
oddguy:int型是4字元空間)。可用網路搜尋參考看看 12/28 16:33
deepking:感謝 用#pragma pack(2)來解決 12/28 16:45
deepking:好像不是== 12/28 16:47
deepking:解決了 感謝~ 12/28 16:51