首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 文件讀寫結構體數組:多出成員變量意外修正內存對齊問題

     編輯:程式設計疑難解答

現象

結構體 st 寫入文件後讀出亂碼,添加一個無關成員後變正常。

原因分析

  • 內存對齊/填充:編譯器為結構體插入填充字節以滿足對齊要求。不同編譯器/編譯選項導致 sizeof(struct st) 與文件實際佈局不一致。
  • 字符串未以 \0 結尾:scanf_s("%s", name, 4) 讀取 3 字符 + \0,若輸入超長會截斷但不保證結構體內其他字段偏移正確。
  • 二進制寫入風險:fwrite(&s[i], sizeof(struct st), 1, fp) 直接寫內存映射,包含填充字節,跨平台/編譯器不可移植。

建議

  1. 用文本格式(CSV/JSON)或序列化庫(protobuf)替代二進制直接寫結構體。
  2. 若必須二進制,手動逐字段讀寫,控制偏移與對齊。
  3. 檢查輸入長度嚴格匹配字段定義(如 name[4] 只能存 3 字符+ \0)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved