Столкнулся со странным. Простенький кусочек кода:
do {
j = fgetc(f);
printf("%c\n", j);
//c = fgetpos(f,p);
printf("J %d\n", j);
} while(j!=-1);
В таком виде символы читаются из файла и выводятся в консоль корректно, каждый по два раза. Программа бодро добегает до конца файла и завершает работу.
Если же раскомментировать строку с
, происходит следующее. Символы всё так же корректно считываются и выводятся в первый раз. После определения позиции значение
почему-то оказывается равным нулю. Далее считывается следующий символ, корректно выводится в первый раз, после определения позиции снова обнуляется и выводится в виде нуля. Разумеется, корректного завершения цикла в этой связи не происходит, программа добегает до конца файла и висит в бесконечном цикле. Обе функции - и чтение символа, и определение позиции - работают без ошибок. Позиция в файле определяется корректно,
возвращает
, что свидетельствует об успехе.
Каким образом получение позиции функцией
обнуляет значение переменной, успешно считанное перед этим функцией
? Чем она принципиально отличается от функции
, которая в том же коде работает нормально и ничего не ломает?
Хочу разобраться в этом вопросе, подскажите, пожалуйста, где копать.