能力值:
( LV2,RANK:10 )
|
-
-
2 楼
感谢分析!
|
能力值:
(RANK:648 )
|
-
-
3 楼
feof()的作用是读取文件在内存中所对应结构体中的EOF标志位,这个标志位被置为TRUE的时机发生在读文件之后(和其文件指针位置无关)。 即第一次执行fgets()操作后读完了helloworld\n,文件指针指向了tobe\n的t的位置,第二次执行fgets()后文件指针指向了文件EOF的位置(注意,文件指针指向了EOF的位置时并没有发生读取EOF位置的操作,因为fgets()读到了\n就结束了,所以没有人知道现在是文件结束了,所以结构体中的EOF标志位并没有置为TRUE),因此第三次while循环的条件还为真,继续进入循环体,读取到了当前位置的结束标志才将内存中文件结构体的EOF标志位置为TRUE,也没有读出任何内容到缓冲区,所以此时打印出tobe\n的原因就是楼主分析的情况了。 代码这样写就可以避免第三次进while循环了:
fgets(szBuff, sizeof(szBuff), pFile);
while(!feof(pFile))
{
printf("%s", szBuffer);
fgets(szBuff, sizeof(szBuff), pFile);
}
最后于 2018-4-22 00:20
被KevinsBobo编辑
,原因:
|
能力值:
(RANK:648 )
|
-
-
4 楼
补充一下,EOF标志位在pFile指向的结构体中,楼主下次调试的时候看一下就清楚了 ^_^
|
能力值:
( LV4,RANK:40 )
|
-
-
5 楼
感谢版主的分析和讲解,又学到知识了
|
|
|