QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 6167|回复: 1
打印 上一主题 下一主题

fputc和fgetc函数读写二进制文件

[复制链接]

525

主题

10

听众

4072

积分

自我介绍
学习中!

优秀斑竹奖 元老勋章 新人进步奖 最具活力勋章

群组Matlab讨论组

群组C 语言讨论组

群组每天多学一点点

群组数学趣味、游戏、IQ等

群组南京邮电大学数模协会

跳转到指定楼层
1#
发表于 2011-8-26 00:52 |只看该作者 |倒序浏览
文件分两种,ASCII文件和二进制文件,fputc函数和fgetc函数读写ASCII文件的数据,用这两个函数同样可以读写二进制文件,只不过有点小的差别。

  我们知道,ASCII文件也叫文本文件,是一个字符串序列,每个字符串由ASCII码来表示,而二进制文件就是直接将数据在内存中的保存形式搬到文件中。文件读取最重要的是要知道什么时候已经读完全部数据了,在读取ASCII文件的时候知蚁介绍过,需要通过EOF判定是否是文件结尾,如果fgetc函数的返回值为EOF,也就说明数据读取完了。(在stdio.h中EOF被定义为-1)。

为什么EOF可以作为ASCII文件结束符

  ASCII文件由字符构成,是一个字符序列,字符由ASCII码来表示,ASCII码得范围为0-255,因此在读取ASCII文件的时候,只要没有到文件结尾,通过fgetc函数读取到的值就不会是-1,因此用EOF来表示ASCII文件结束是完全没问题的。

二进制文件读取时候的问题

  在用函数fgetc读取二进制文件的时候,是一个字节一个字节进行读取的,而很可能在文件未结束前就读取到值为-1了,因为二进制文件是一个字节序列,这个时候用EOF来表示文件结束就会有问题了,会导致数据读取不全。这时,虽然fgetc函数的返回值为EOF,但是这个并不是真正的文件结束,那如何知道文件什么时候真正结束呢?

  为了解决这个问题,ANSI C只好定义一个函数feof用来判定文件是否真的结束。

feof函数

feof(pFile);

feof函数的参数为文件结构指针,如果文件结束,则feof函数返回值为1,否则为0。

C语言:
while(!feof(pfile))
{
    ch = fgetc(pfile);
    putchar(ch);
}
  上面的代码片段就是读取一个文件的数据,并显示到屏幕上,这里并没有指明是二进制文件,因为feof函数也支持ASCII文件,因此我们通过fgetc函数读取文件的时候可以不管文件类型直接这样调用。

putc函数和getc函数

  这两个并不是什么新函数,而是系统将fputc和fgetc函数定义为宏名putc和getc了,因此这个其实是和fputc和fgetc函数完全一样的功能,主要是书写方便而已。

putw函数和getw函数 puts函数和gets函数

  getc函数和putc函数是用来读写一个字符的,这样一个个的读写无法满足我们的需要,getc和putc可以理解为读写一个字节,而getw和putw则是读写一个字,也就是读写两个字节。gets和puts函数则更进一步,读写一个字符串,也就是说每次可以读写n个字节的数据。

  从原理上来说,putw和puts最终都是调用的putc,我们完全可以设计我们自己的函数用来读写任意类型的数据,例如我们可以设计读写浮点型数据的函数putf和getf等


转自:知蚁博客
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
第一次用linux登录madio,纪念一下

0

主题

4

听众

151

积分

群组C 语言讨论组

群组数学建模

群组LINGO

群组Matlab讨论组

群组岩土力学与地下工程

2#
发表于 2011-12-1 09:25 |只看该作者
回复

使用道具 举报

qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2024-4-27 04:59 , Processed in 0.344233 second(s), 45 queries .

回顶部