首先看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);
}