私は、次のCコードのMinGW-W64(gcc version 7.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
)とwin10とVisual Studio 2017(CL.EXEバージョンMicrosoft (R) C/C++ Optimizing Compiler Version 19.11.25547
)にウィンドウで `fseek(...、0、SEEK_CUR)`が失敗するのはなぜですか?
#include <stdio.h>
int main()
{
FILE * file = fopen("ans.txt", "r+");
printf("%ld", ftell(file)); // prints 0
fgetc(file);
printf("%ld", ftell(file)); // prints -18
printf("%d", fseek(file, 0, SEEK_CUR)); // -1
printf("%ld", ftell(file)); // prints 150
fclose(file);
return 0;
}
をテストしてみた
ans.txt
ファイルである(行はUNIX形式で終わります)
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
line 11
line 12
line 13
line 14
line 15
line 16
line 17
line 18
line 19
line 20
しかし、私はバイナリモードでファイルを開いたり、行末のスタイルを「Windows/Mac OS 9」に変更しても問題ありません。
Windowsのcrtとは何か関係ありますか?
を行末。 –
ファイルを正常に開いたことを確認しましたか?失敗した場合、コードはクラッシュする必要はありません。数字の後に改行(またはスペース)を印字することは賢明でしょう。 –
'fgets()'の意義は何ですか?あなたのコードはそれを呼び出さない?あるいは、もっと正確には、現在私たちが見直しを要求しているコードは 'fgets()'を呼び出さない。おそらく、これはあなたが私たちに示しているものがあなたがテストしているコードと同じではないことを意味し、その違いにはトラブルの一部が含まれています。私たちは、見えないコードの何が間違っているかを推測することはできません。 –