[問題] struct 讀檔問題

看板C_and_CPP (C/C++)作者 (wnuiayldh)時間16年前 (2009/12/28 16:18), 編輯推噓1(106)
留言7則, 2人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 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)

12/28 16:30, , 1F
這是UDT(User Defined Type)的成員對齊問題,小弟大陸這邊
12/28 16:30, 1F

12/28 16:31, , 2F
是這樣稱呼的。簡單來說就是short所占據的2字元空間后面
12/28 16:31, 2F

12/28 16:32, , 3F
編譯器添加了用來跟int型成員對齊的額外的2字元空間(因為
12/28 16:32, 3F

12/28 16:33, , 4F
int型是4字元空間)。可用網路搜尋參考看看
12/28 16:33, 4F

12/28 16:45, , 5F
感謝 用#pragma pack(2)來解決
12/28 16:45, 5F

12/28 16:47, , 6F
好像不是==
12/28 16:47, 6F

12/28 16:51, , 7F
解決了 感謝~
12/28 16:51, 7F
文章代碼(AID): #1BE6dSyj (C_and_CPP)
文章代碼(AID): #1BE6dSyj (C_and_CPP)