我在某处看到了这段代码:
#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将具有一个本地文件指针,它将用于读取文件。
但是运行后,我意识到它实际上打印了整个文件。唯一的结论是,在读取第一个输入后,它实际上将传递的文件指针向前移动,否则它将继续不停地打印第一个单词。
我查看了fscanf的手册,但没有找到任何关于读取后文件指针移动的内容。
请问是否有人能够解释或提供源代码,说明传递的文件指针实际上是在读取后移动的呢?
%s
(未指定最大长度,例如%1023s
)基本上类似于gets
——极其危险,因为它不限制输入长度或防止缓冲区溢出。 - Jerry Coffin