fwrite写入字节数与实际不符,解决:刷新缓冲区

遇到这样一个情况:

以二进制形式打开文件,循环中每次fwrite写入固定字节,但每次实际写入字节数与fwrite参数都不一样,有多有少,

但是!循环完后总的字节数是一致的。

 

于是打开google搜索,大多是说不以二进制打开的情况下会产生多余字节,自动添加\n等,显然与我的情况不符。

 

进一步搜索,问题得到了解决:

C库函数写文件通过缓冲区,所以产生每次fwrite字节数不一的情况,是因为没有及时刷新缓冲区(这样设计可能是为了字节对齐提高效率吧,猜的...)

所以,在每次fwrite后,调用一次fflush(),刷新缓冲区,即可解决问题。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
缓冲区(Buffer)是计算机中用于临时存储数据的一段内存空间,通常被用来解决数据传输速率不匹配的问题。在数据传输时,如果发送端和接收端的数据处理速度不一致,就会出现数据阻塞的问题,这时候就需要一个缓冲区来暂时存储数据,以便让数据传输更加平滑。 在程序设计中,缓冲区通常也被用于优化数据读写的性能。例如,当程序需要频繁地读写磁盘文件时,如果每次都直接读写磁盘,会产生较大的时间开销。这时候可以引入缓冲区来进行批量读写,以减少磁盘操作的次数,从而提升整体的读写性能。 在C语言中,缓冲区通常是通过数组来实现的。例如,定义一个字符型数组buf,可以用来存储最多n个字符的数据: ``` char buf[n]; ``` 然后,可以使用标准库函数fread()和fwrite()来进行缓冲区的读写操作。例如,从文件中读取n个字符到缓冲区中: ``` fread(buf, sizeof(char), n, fp); ``` 其中,fp是文件指针,表示要读取的文件;sizeof(char)表示每个字符占用的字节数,通常是1;n表示要读取的字符数。调用fread()函数后,会将n个字符读取到buf缓冲区中。 类似地,如果要将buf缓冲区中的n个字符写入到文件中,可以使用fwrite()函数: ``` fwrite(buf, sizeof(char), n, fp); ``` 其中,fp是文件指针,表示要写入的文件;sizeof(char)表示每个字符占用的字节数,通常是1;n表示要写入的字符数。调用fwrite()函数后,会将buf缓冲区中的n个字符写入到文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值