簡體   English   中英

如何使用fgets獲取整行

[英]How to get whole line using fgets

我需要從不同的流中讀取數據(不僅是從stdin中讀取)。 我發現了fgets函數,可以讀取有限數量的字符,但是我需要像gets一樣獲取整個字符串,但必須指定輸入流。 請幫助解決此問題。

讀取整個文件的正常過程是這樣的:

  • 開啟檔案
  • 尋找到盡頭
  • 讀取位置
  • 創建該大小的緩沖區
  • 尋求開始
  • 讀到緩沖區
  • 關閉檔案

該站點上的示例正是這樣做的: http : //www.cplusplus.com/reference/cstdio/fread/

如果要讀取直到特殊字符,則只需在循環中運行fgets即可,在循環中使用realloc調整緩沖區大小。 一種常見的方法是不每次都增加固定大小的緩沖區,而是增加一個值,例如每次循環迭代將其大小加倍。 這樣,您將最多執行log(n)重新分配調用。

希望我明白了...您需要的是尋找文件結尾(EOF),這是在遇到(猜測什么?)文件結尾時設置的。

至於緩沖區大小,您可以先檢查流大小,以確保為接收緩沖區分配足夠的內存。

使用重新分配通常不是一個好選擇。 它很慢,僅表明您沒有預期的內存需求。 除非絕對有必要(確實是硬內存約束),否則分配更多的資源要比重新分配好。 當然,沒有什么比“正確的”分配更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM