跳过文本文件前n行,哪种效率高?

cy010510630 2010-02-24 01:37:21
用fgetc一个一个字符读取,判断回车数,知道等于n。然后ftell。
用fgets直接读取一行。读n次。

只是为了跳过前n行而已,所以前几行具体是什么字符无关紧要
此情况下,哪种方法效率高?
比如有10万行,哪种方法效率高?
...全文
243 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucasma.eth 2010-02-24
  • 打赏
  • 举报
回复
这个很明显吧,fgetc与fgets都要读写磁盘文件。

比如你一行有10个字符, 用fgetc要读IO 10次, 用
fgets一次就可以了, 效率肯定高.
icansaymyabc 2010-02-24
  • 打赏
  • 举报
回复
一般情况下,fgets 的效率比 fgetc 稍高一点,那是因为系统函数是经过专家优化的。

不过在现代计算机上处理 1000万行数据,fgets 和 fgetc 的差异你根本就看不出来。所以你还是别操这些心了,不管用哪种方法,程序能正确运行就是好的。
cy010510630 2010-02-24
  • 打赏
  • 举报
回复
谢谢 各位,结账.....
mLee79 2010-02-24
  • 打赏
  • 举报
回复
除了 mmap , fread , fwrite 以外的都慢....
stardust20 2010-02-24
  • 打赏
  • 举报
回复
fgets应该会比较高一点。。至少省好多的函数调用(如果没有做成宏的话)。。而且对每个字符的操作显然会比一行的多。。。
《C标准库》上面说
函数fgetc首先保证流支持普通的读操作同时一个读请求被及时接受;然后决定是否需要给流分配一个缓冲区,如果需要,则请求分配;接着它确定是否需要执行一个物理读操作(填满一个空的缓冲区或者直接输入字符),如果需要,就执行这个操作。。。。
对每个字符都执行所有这些操作的实现一定很慢。。。。
一个主要的技巧是尽可能少地的进行物理读操作,一次操作尽可能多的读取字符。。。
taodm 2010-02-24
  • 打赏
  • 举报
回复
自己测一下最清楚。
其实,能用就行了。

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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