请问fread, fscanf,fgets的区别

luckdog01 2006-06-02 02:12:29
请问,
1. 为什么fread对应2进制的打开方式,fscanf对应文本打开方式呢
2. fgets又用在什么场合,有什么不同么?
...全文
1966 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wang37921 2010-06-25
  • 打赏
  • 举报
回复
mark3,15楼~
eplanet 2006-06-15
  • 打赏
  • 举报
回复
请问,
1. 为什么fread对应2进制的打开方式,fscanf对应文本打开方式呢
2. fgets又用在什么场合,有什么不同么?

fread :以字节位计算长度,按照指定的长度和次数读取数据,遇到结尾或完成指定长度读取后停止.
fscanf :格式化读取,按照指定的格式串进行读取数据,并将数据初始化为指定的格式.所以在文本方式下才能有效的判断数据内容.
fgets :整行读取,遇到回车换行或结尾停止.在文本方式时使用.

其实文本和二进制的差别就在于读取的数据,文本方式会默认为是ASCII码,二进制方式则原样将数据读出.所以文本时候的格式控制如回车,制表符等,二进制的时候是不能有效的自动判断的。

他们的效率要看具体的程序和算法的,否则差别并不会很大.其中fread 最快.因为可以指定读取长度.能够有效的减少I/O操作,硬盘读取才是文件操作最耗时的部分.
luckdog01 2006-06-15
  • 打赏
  • 举报
回复
up....
luckdog01 2006-06-06
  • 打赏
  • 举报
回复
up一下 还有更其他的答案么?
luckdog01 2006-06-03
  • 打赏
  • 举报
回复
fread将缓冲区内容当作二进制数据形式来处理
fscanf,fgets将缓冲区内容当作文本形式来处理
——————————————————————————
这是不是说如果2进制用fread,文本用fscanf,fgets效率会高一点?
lddLinan 2006-06-02
  • 打赏
  • 举报
回复
fread,fscanf,fgets都是通过缓冲区来间接操作文件,在缓冲区和文件之间会有一些调整。
fread将缓冲区内容当作二进制数据形式来处理
fscanf,fgets将缓冲区内容当作文本形式来处理,所以和打开方式会有一定的关联。

jixingzhong 2006-06-02
  • 打赏
  • 举报
回复
其实倒没有绝对的说fread对应2进制的打开方式,fscanf对应文本打开方式,
但是一般都这么做,
如果非要 fread 文本文件也可以,
但是一般会出错,
因为文本一般都是 fscanf 产生的。

也有可能会正确,
就是这个文本是 fwrite 产生的 ..
所以,
其实只要是 fwrite 对应了 fread
fscanf 对应了 fprintf
fgets 对应 fputs
就可以了 ...

当然,
建议楼主还是 使用一般的规则:
fread对应2进制的打开方式,fscanf对应文本打开方式
herman~~ 2006-06-02
  • 打赏
  • 举报
回复
自己查查MSDN吧
nobush 2006-06-02
  • 打赏
  • 举报
回复
沒有對應2进制、文本打开方式一說。

fgets读取一个长度为(n-1)的字符串;
fread按照指定的长度單位读取数据项;(區別在於單位可以不是字符)
fscanf按指定格式讀,與scanf類似

65,190

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧