如何用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
分享:
喜歡
0
贈金筆
加載中,請稍候......
評論加載中,請稍候...
發評論
登錄名: 密碼: 找回密碼 注冊記住登錄狀態
昵???稱:
評論并轉載此博文
發評論
以上網友發言只代表其個人觀點,不代表新浪網的觀點或立場。