나는 (라인 유닉스 스타일로 끝나는) 다음과 같은 C 코드윈도우에서`fseek (..., 0, SEEK_CUR)`이 실패하는 이유는 무엇입니까?
는 MinGW-W64와 win10 (gcc version 7.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
)에
#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;
}
및 Visual Studio 2017 (CL.EXE 버전 Microsoft (R) C/C++ Optimizing Compiler Version 19.11.25547
)
ans.txt
파일이 테스트를했습니다
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()'를 호출하지 않습니다. 아마도 이것은 우리에게 보여주고있는 것이 테스트중인 코드와 같지 않다는 것을 의미하며 그 차이는 문제의 일부를 포함합니다. 우리가 볼 수없는 코드의 문제점을 추론 할 수는 없습니다. –