首先看feof()
函数(准确来说是宏)的定义:
#define _IOEOF 0x0010
#define feof(_stream) ((_stream)->_flag & _IOEOF)
原因是当文件位置指针(fp->_ptr)
到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)
的bit4才会被置一;然后再调用feof()
,才会得到文件结束的信息。
所以,如下程序就多输出一个0xFF
char ch;
while(!feof(fp))
{
ch = fgetc(fp);
printf("%x",ch);
}
正确应该这样来:
char ch;
ch = fgetc(fp);
while(!feof(fp))
{
printf("%x",ch);
ch = fgetc(fp);
}