【问题标题】:Cannot use fgets() to read file after "consuming it up"?“消耗”后无法使用 fgets() 读取文件?
【发布时间】:2015-05-23 13:27:45
【问题描述】:

在调试了一段时间后,我意识到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() 从文件中获取数据的次数太多时,它会到达文件的末尾。然后当你再次使用它时,它什么也不会返回(只是一个空指针但没有错误!!)

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

所以我想知道是否有一种方法可以刷新机器并进行更新,以便我可以再次使用 fgets() 函数。 谢谢。

【问题讨论】:

    标签: c buffer fgets


    【解决方案1】:

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

    rewind(file);
    

    并使用 fgets() 再次读取问题不在于 fgets(),您理解在文件访问期间文件指针不断移动。

    【讨论】:

    • 谢谢;我知道这个功能绝对没有问题。我只需要这样表达,因为我不是以英语为母语的人。不过还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2015-09-06
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多