2011-12-02 27 views
1

可能重複:
How to dynamically allocate memory space for a string and get that string from user?如何分配未知字符串長度存儲在C

我有一個文件。當從一個文件逐行讀取時,字符串的長度是未知的,所以如何以有效的方式爲未知長度的字符串分配內存。

注: -

文件中的每一行用 「\ n」 分隔。

編程語言 - C

+3

http://stackoverflow.com/questions/8164000/how-to-dynamically-allocate-memory-space-for-a-string-and-get-that-string-from-u –

+0

請參閱讚的鏈接。在打開新的問題之前,最好先查看現有的問題。 – dbeer

+0

@dbeer我搜查了,我找不到相關的問題,這就是爲什麼我提出了它。上面我沒有發現這個過程的一部分。任何感謝的鏈接,但我仍然不滿意答案。我期待更好的回答,這會減慢我的執行速度。 – Thangaraj

回答

5

這樣做的一般模式是

  • 分配一個緩衝器具有指定大小的malloc
  • 嘗試,直到你運行的空間
  • 使用realloc到緩衝區的規模擴大一倍,並繼續閱讀
  • 繼續使用此模式,直到該文件是完全讀
0

一個讀入該緩衝區方法是通過系統調用找出文件大小(如果我沒有記錯的話,可以用fstat)。如果文件非常大,這可能不太適合,因爲它可能不適合內存。

另一種方法是逐行讀取(或以n個字節爲單位),直到文件字符結束。參見: http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html

0

您可以使用malloc,fgetsrealloc

從一個固定大小的malloc開始。也許是64個字節。

然後fgets你的字符串的大小。檢查你的字符串的末尾是否有\n。如果不是,realloc字符串將大小加倍。現在fgets更多並重復,直到您的字符串以換行符結束或您到達文件的末尾。

相關問題