“消费”之后无法使用fgets()读取文件?

时间:2015-05-23 13:27:45

标签: c buffer fgets

调试程序一段时间之后,我意识到C语言中的函数fgets()存在一些问题:

示例代码:

....
char arr[50];
File* file=fopen("mytext.txt","r");

for(int i=0;i<=100;++i){
    ....
    fgets(arr,sizeof(arr),file);        //I use a for loop here for example 
    ....                                //just to illustrate that I use the 
    ...do some stuff...                 //fgets() function lots of times
   }

 fgets(arr,sizeof(arr),file);           //And now I use it again but get nothing
                                        //because I have used the fgets() to consume the file up
 ....

所以你看,我想在这里说的是:当你使用fgets()从文件中获取数据太多次时,它将到达文件的末尾。然后当你再次使用它时,它将不会返回任何内容(只是一个空指针,但没有错误!!)

调试一段时间后我发现了这个问题。我注意到其他formattd输入函数也存在同样的问题,如 scanf()

所以我想知道是否有一种方法来刷新机器并使其成为新的东西,以便我可以再次使用fgets()函数。 感谢。

1 个答案:

答案 0 :(得分:4)

你正在使用的是文件指针,fgets()一直运行直到它到达EOF。因此,当没有任何内容需要读取时,它返回NULL表示EOF。 因此,为了到达文件的开头,您需要使用

rewind(file);

并使用fgets()再次读取问题不是fgets()它的理解,在文件访问期间文件指针一直在移动。