4. fread() fwrite()

一、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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值