您的位置:首页 > Web前端

EOF和feof()的问题

2015-07-19 13:16 246 查看
EOF和feof都是判断文件是不到结束了

但是两个还是区别的
EOF 是判断文本文件类型的  不能判断二进制文件
#define EOF -1
这个数在二进制文件中是存在的 所以会存在还没有到文件结束就退出的情况

而 feof()就解决了这个问题  feof()可以判断文本文件 和二进制文件

但是在feof()中应该注意的是

当文件内部的指针移动到文件末尾的时候 要再一次进行读或写的操作 才会退出

#define feof(_stream) ((_stream)->flag & _IOEOF )
因为feof(fp) 当文件没有结束的是偶返回的是0  可以这样理解 当文件指到末尾 在此发生一次读写的时候 (_stream)->flag & _IOEOF会被置为1

好了看程序吧!

------------------------------------------------
#include <stdio.h>

int main( void )
{
char c;
FILE *fp = NULL;
fp = fopen( "./abc" ,"r" );
if( fp == NULL ){
perror( "./abc" );
}else{
while( (c = fgetc(fp)) != EOF ){
fprintf( stdout,"%c",c);
}
}
return 0;
}
------------------------------------------------------
#include <stdio.h>

int main( void )
{
char c;
FILE *fp = NULL;
fp = fopen( "./abc" ,"r" );
if( fp == NULL ){
perror( "./abc" );
}else{
while( !feof( fp ) ){
fprintf(stdout,"%c",c);
c = fgetc( fp );
}
}
return 0;
}
-------------------------------------------------------
对于feof() 先输出  然后当指针指到文件末尾 在此发生 fgetc()
则 判断while(  !1 ) 就会退出
如果不这样就会出现一点乱码。
好了结束了!有一段时间没有写博客了!以后要坚持更新!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: