如何用C实现一个readLine()函数- 该函数每次读入文本文件的一行并打印到屏幕

(2012-04-13 00:23:41)

标签:

打印

文本文件

如何

杂谈

如何用C实现一个readLine()函数? 该函数每次读入文本文件的一行并打印到屏幕以前看到过这方面的讨论

http://bbs.chinaunix.net/viewthread.php?tid=248256

但是总感觉没有一个好的总结方案,就没了下文

java里面有InputStream.readLine可以读入文件的一行然后返回一个String。如果是一个大的文本没有换行的就能返回一个非常大的对象。

我想,如何用C语言来实现一个readLine()函数呢

1. 基本思路,getchar循环,但是这样会不会效率太低?

如果一个大文本就是没有换行一直到最后,getchar岂不是调用了N次

2.

每次fread到一个1k的buffer,看看里面有没有换行符号,如果有的话,就输出换行符之前的内容,fseek到换行符之后。继续fread。

但是这样有个问题,如果fread的内容还没有换行,我就得分配一块新的内存去创建一个更大的buffer。而且如果文本行很大,我需要反复调用realloc,内容也被不停的拷贝和移动位置,这样做的效率似乎也很低的。

3. 如果用c++,cin.getline()也是要放到一个buffer里面,那么这个buffer开多大呢?

开小了会读不完一行,开大了--开多大又没谱了

有没有一个成熟的解决方法呢?

或者有dx研究过javahttp://www.eminlv.com/的实现的(不管多大行的都能输出),给个实现原理吧!

谢谢了,我先抛砖引玉... ...man getline原帖由 flw 于 2008-12-19 15:11 发表

http://bbs.chinaunix.net/images/common/back.gif

man getline

unix平台

solaris

HP-itanium

AIX

上面去man getline都是说没有手册... ...

这个是标准库函数么? ...原帖由 jeanlove 于 2008-12-19 15:33 发表

http://bbs.chinaunix.net/images/common/back.gif

unix平台

solaris

HP-itanium

AIX