fseek(fp, i, SEEK_SET); 後 ftell(fp) 返回 i+1,至第 290 字節時返回 802。
SEEK_SET:文件開頭SEEK_CUR:當前位置SEEK_END:文件結尾SEEK_CUR 會導致位置疊加偏移。-1L。"r" 模式讀取 \r\n 轉為 \n,導致邏輯位置與物理字節數不一致,隨文件增大誤差累積(解釋 290→802)。
FILE *fp = fopen("data.bin", "rb"); // 必須二進制模式
if (!fp) return;
long pos = 290;
if (fseek(fp, pos, SEEK_SET) != 0) { perror("fseek"); return; }
long actual = ftell(fp);
printf("目標 %ld, 實際 %ld\n", pos, actual); // 應相等
fopen 模式是否為 "rb"/"wb"。fseek 返回值為 0(成功)。ftell 與預期位置,若系統性偏移 1 字節,檢查是否混用 SEEK_CUR。fseeko64/ftello64 避免長整型溢出。