![](/img/trans.png)
[英]How to read space separated input in C++ When we don't know the Number of input
[英]How to use fgets if you don't know the number of characters to be read?
我需要讀取一個文件並將其中的文本發送到一個字符串,以便我可以解析它。 但是,程序不會確切地知道文件的長度,所以如果我想使用fgets()
,或者有更好的選擇,我該怎么辦?
注意:
char *fgets(char *str, size_t num, FILE *stream);
不要忘記fgets()
讀取一行,但要有足夠的空間。
人類很少寫行超過... 80,256,選擇一個數字......字符。 POSIX建議行長度為4096.所以,我通常使用:
char buffer[4096];
while (fgets(buffer, sizeof(buffer), fp))
{
...process line...
}
如果您擔心某人可能在一行中提供超過4K的數據(並且機器生成的文件,例如HTML或JSON,可能包含該數據),那么您必須決定下一步該做什么。 您可以執行以下任何操作(並且可能還有其他一些我未提及的選項):
getline()
。 它為你做內存分配。 如果您不在POSIX系統上並且沒有getline
可用,請查看Chuck Falconer的公共域ggets
/ fggets
函數 ,這些函數動態增加緩沖區以消耗整行。 (這個鏈接現在似乎已經關閉,但archive.org有一份副本 。)
分配緩沖區( str
指向的緩沖區),並將緩沖區的大小傳遞給num
。 占用的實際空間僅為fgets
讀取的文本的長度。
就像是:
char str[1000];
fgets(str, 1000, &file);
如果下一行在換行符之前只有10個字符,則str將保存這10個字符,換行符和空終止符。
編輯 :以防萬一有任何混淆,我不打算上面的聲音,好像緩沖區中的額外空間沒有被使用。 我只是想說明你不需要提前知道你的字符串將持續多長時間,只要你可以在它上面放一個最大長度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.