前几日做一些琐碎事,用到fread函数,这里简单说下踩得坑。
关于fread函数的返回值。
在实际使用时,这个理解错了bug++。
realRead = fread(buf,item,count,fp) (每次读item大小的数据块,分count次来读。)
fread函数返回的并不是字节数,而是返回的是成功有效的读取的item元素的个数,而成功读入的字节数则是realRead * sizeof(item)
realRead 是小于等于count的,当文件大小刚好为item大小的整数倍是才会相等。
返回的是真实读入item元素的个数,虽然读了count次,但是真正读到的有效个数为realRead个, 真实读入字节数就为realRead*sizeof(item)
RETURN VALUE
fread and fwrite return the number of items successfully read or written (i.e., not the number of
characters). If an error occurs, or the end-of-file is reached, the return value is a short item
count (or zero).
fread does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3)
to determine which occurred.
正式点的解释
fread(从文件流读取数据)
表头文件 #include<stdio.h>
定义函数 size_t fread(void * ptr,size_t size,size_t count,FILE * stream);
函数说明 fread()用来从文件流中读取数据。参数stream为已打开的文件指针,参数ptr 指向欲存放读取进来的数据空间,读取的字节数以参数size*count来决定。
Fread()会返回实际读取到的count数目,如果此值比参数count来得小,则代表可能读到了文件尾了或者有错误发生(前者几率大),这时必须用feof()或ferror()来决定发生什么情况。
返回值 返回实际读取到的count数目。
fread返回的不是字节数,
当且仅当下面这么用的时候,返回值才是字节数(当然因为恰好一个数据块大小为1个字节,相当于realRead*1)
char buff[size];
FILE *fp;
...
realRead = fread(buff, 1, size, fp);
...
如果是: fread(buff, size, 1, fp)
返回1表示读取了size字节,返回0表示读取数量不够size字节