ftell возвращает 11 вместо 10 - PullRequest
1 голос
/ 20 апреля 2019

У меня есть файл test.txt, который содержит две строки.

123456789
abcdefghi

А вот код С.

FILE* fp;
char str[20];
fp = fopen("test.txt", "r");
printf("%d", ftell(fp));                       // 0
printf("%s", fgets(str, sizeof(str), fp));     // 123456789\n
printf("%d", ftell(fp));                       // 11

Я был смущен, почему в строке 10 символов ("123456789\n"), но позиция увеличивается на 11.

[редактировать]

Спасибо за комментарии. Но я не знал, как обновить то, что я уточнил в правильном формате. Я замечаю, что я сделал неправильно в этом вопросе здесь.
1. В Windows '\n' хранится как "\r\n", поэтому вместо него возвращается 11.
2. fp = fopen("test.txt", "r") это преобразует "\r\n" обратно в '\n'. Откройте файл в двоичном формате, "rb" и fgets должны читать "123456789\r\n".
3. Я должен использовать %ld в строке формата, поскольку тип возвращаемого значения ftell равен long int.

...