一、fread()
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数说明:从流中读入nmemb个大小为size的对象到地址ptr处。
二、fwrite()
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
参数说明:从ptr写入nmemb个大小为size的对象到流中。
三、用法
比如读入100个学生的数据,每个学生数据块大小相同,此处用法方便。
函数缺陷:只能操作数据块工整的内容。
示例1:缺陷问题
// 数据量足够
fread(buf,1,10,fp); // 读一次函数返回值为10,读入10个字节
fread(buf,10,1,fp); // 同样读一次返回值为10,读入10个字节
// 假如数据量为5个字节
fread(buf,1,10,fp); // 读一次函数返回值为5,读入5个字节
fread(buf,10,1,fp); // 同样读一次返回值为0,读入???个字节
采用单字节操作,将其当作fgetc()和fputc()用,不用考虑数据块工整问题。
示例2:文件简单拷贝功能
// 此处BUFSIZE设置的1024
// 错误写法
while(fread(buf,1,BUFSIZE,fps) // 最后一批数据读入的字节数可能不满足1024,但能正常读入到buf
fwrite(buf,1,BUFSIZE,fpd); // 这种情况就会报错,因为最后一次写入的字节数不能够满足1024
// 修改为
while((n = fread(buf,1,BUFSIZE,fps)) > 0)
fwrite(buf,1,n,fpd); // 读入n个,就写n个到buf