有一个名字为data的文件,内容为
abcd_efgh_ijkl_mnop_qrst_uvwx_yzAB_CDEF_GHIJ_KLMN_OPQR_STUV_WXYZ_
运行如下程序代码:
{
int i;
FILE *fp = NULL;
int readCnt = 0;
char str[100] = {0};
for (i=0; i<4; i++)
{
readCnt = fread(str, 25, 1, fp);
printf("readCnt:%d Msg: %s\n", readCnt, str);
memset(str, 0, sizeof(str));
}
return 0;
}
运行结果:
readCnt:1 Msg: abcd_efgh_ijkl_mnop_qrst_
readCnt:1 Msg: uvwx_yzAB_CDEF_GHIJ_KLMN_
readCnt:0 Msg: OPQR_STUV_WXYZ_
readCnt:0 Msg:
可见,只要fread没有读取数据失败,那么不管fread返回0还是小于期望的值,如果还有残留数据的话,就会读取出来,同时改变了文件指针的位置。
检测fread有没有读取错误可以用ferror()函数。
如果将代码 readCnt = fread(str, 25, 1, fp); 替换成readCnt = fread(str,1, 25, fp);
运行结果:
readCnt:25 Msg: abcd_efgh_ijkl_mnop_qrst_
readCnt:25 Msg: uvwx_yzAB_CDEF_GHIJ_KLMN_
readCnt:16 Msg: OPQR_STUV_WXYZ_
readCnt:0 Msg:
将fread第2、3个参数互换,只是返回值不同,但是都能读取到数据(如果有残留数据的话)。