while(!feof(pfile)) 模式易導致多讀一次,且 fread 返回 0 可能原因:
"rb"),Windows 下文本模式遇 0x1A 視為 EOF。leng 解析錯誤,後續偏移錯位。feof 尚未置位,下一輪 fread 返回 0。while (1) {
int r = fread(&leng, sizeof(int), 1, pfile);
if (r != 1) break; // 讀不到長度直接退出
// 後續同理檢查每個 fread 返回值
}
以實際讀取項數為循環條件,避免 feof 滯後。