文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>有关文件操作feof的一个细节

有关文件操作feof的一个细节

时间:2010-04-22  来源:legendtkl

最近degug 一个程序,给我郁闷坏了。大家都来看看。
这是一个小测试程序 

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ch;
    FILE *fp;

    if((fp=fopen("1", "r")) == NULL)
    {
        printf("Cann't open file 1\n");
        exit (-1);
    }
    while(!feof(fp))
    {
        ch = fgetc(fp);
        putchar(ch);
    }
    putchar('\n');
    return 0;
}

大家可以在自己的机子上跑一下。
如果文件1里面是字符:  guanxieguojia
输出的结果是真确的吗?

    非也!
    这是为什么?
    其实这就是个细节问题,让feof()给耍了。
    附上feof()函数的源码

#include <errno.h>
#include <stdio.h>

#undef feof
#undef feof_unlocked

/* Return non-zero if STREAM has its EOF indicator set. */
int
feof (stream)
     FILE *stream;
{
  if (!__validfp (stream))
    {
      __set_errno (EINVAL);
      return -1;
    }

  return stream->__eof;
}

不知大家看明白没?我太菜,没看明白。
我经过反复查阅终于明白了。
原来feof()函数判断文件是否结束的时候,当前文件指针指向文件结尾时, feof()返回的还是0,当下一次
试图访问文件的时候,它才会返回一,这时候大家再看上面的测试代码应该就明白了吧!
最后那个多出来的字符是EOF,也就是-1.
什么?不信? 自己打出来看看就知道了。
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载