关于feof()的bug

前几天参加一个培训,听人说使用feof()作为判断文件结束的标志时要小心。当时我不以为然,feof, 这个函数我用过啊,没有发现什么bug?

但回来后写了一个程序一试,果然有bug.

我试着使用feof作为判定文件结束的标志来复制一个文件:

 

while (!feof(fp_rd))

{

char t = fgetc(fp_rd);

fputc(t, fp_wr);

}

 

但当我打开复制后的文件的时候,发出末尾多出来了一个0xff.

 

上网查了一下:

c语言中feof函数是以上一次读取的内容来判断文件是否结束的,而从上面的程序可以看出,我是先判断然后再读取文件,所以必然会导致写文件时多写一截。改正为如下形式就行了:

 

char t = fgetc(fp_rd);

 

while (!feof(fp_rd))

{

fputc(t, fp_wr);

t  = fgetc(fp_rd);

}

你可能感兴趣的:(关于feof()的bug)