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

C 語言文件操作常見陷阱:sizeof(int) 跨平台差異與 fseek 偏移量正確用法

     編輯:程式設計疑難解答

問題現場

代碼運行進入無限循環,無法停止。經排查發現兩個關鍵問題:

問題 1:sizeof(int) 不一定等於 2

// 錯誤假設
fseek(fp, 2, SEEK_CUR); // 假設 int 佔 2 字節
  • C 標準規定 sizeof(int) >= 2,具體大小由編譯器和目標平台決定(常見 4 字節)。
  • 應使用 sizeof(int) 動態計算偏移量。

問題 2:fseek 參數缺少基準宏

// 錯誤
fseek(fp, offset, 1); // 1 非標準,不可移植

// 正確
fseek(fp, offset, SEEK_CUR); // 相對當前位置
// 其他標準宏:SEEK_SET (文件開頭), SEEK_END (文件末尾)

修正後代碼片段

int offset = sizeof(int); // 正確獲取 int 大小
fseek(fp, offset, SEEK_CUR); // 正確向後移動

最佳實踐

  1. 永不假設基本類型大小,始終使用 sizeof。
  2. 文件定位必須使用標準宏 SEEK_SET、SEEK_CUR、SEEK_END。
  3. 檢查 fseek 返回值(成功返回 0),異常時處理錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved