У меня есть файл 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
.