作者deepking (wnuiayldh)
看板C_and_CPP
標題[問題] struct 讀檔問題
時間Mon Dec 28 16:18:33 2009
遇到的問題: (題意請描述清楚)
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