Я видел этот код где-то:Перемещает ли fscanf указатель переданного файла вперед?
#include<stdio.h>
int main()
{
FILE * fp;
char s[1024];
fp = fopen("file","r");
while(fscanf(fp, "%s", s) != EOF)
{
puts(s);
}
return 0;
}
Я ожидал, что это будет держать на печать первого слова файла в бесконечном цикле. Я считал, что указатель файла принимается за вход только для того, чтобы получить точку, откуда должен быть прочитан вход, и fscanf будет иметь локальный указатель файла, который он будет использовать для чтения файла.
Но при работе я понял, что на самом деле распечатывает весь файл. Только вывод, который я могу сделать, состоит в том, что после прочтения первого ввода он фактически перемещает переданный указатель файла вперед, иначе он просто должен был бы печатать первое слово снова и снова.
Я видел man documentation из fscanf, но не смог найти ничего о перемещении указателя файла после прочтения.
Может кто-нибудь объяснить или указать источник, где указано, что переданный указатель файла действительно перемещается после прочтения?
Я бы предложил удалить тег C++, поскольку ничего здесь не является частью библиотеки C++ или, во всяком случае, является идиоматическим языком C++. – Borgleader
@ Борлидер Ах, отлично. Удалили. –
Указатель файла используется для указания позиции чтения/записи в файле.Поэтому он явно движется, когда вы читаете содержимое файла :) –