![](/img/trans.png)
[英]C++ : getline() function does not include last character/string when reading from a file
[英]C++ - Does getline have a maximum string or character capacity?
我的問題是關於我正在處理的一項任務。 似乎有多種方法可以完成任務。
我正在編寫的程序將是文本文件的過濾器。 作業的目的是獲得 fstream 和 getline 的經驗。
要求:
我有一個我編寫的程序的工作草案,但是 getline 在讀取我的文本文件的方式上不一致。 基本上,它會將一行讀取為一個字符串,這就是我想要的。 正如它在第二行中所寫的那樣; 但是,該程序在行中途拋出一個運行時錯誤,Windows 將其關閉。
getline 是否有一個緩沖區填滿並需要在每行讀取后清理?
我的程序偽代碼:
我正在以這種方式實現 getline:
getline(fileIN, str1, '.')
str1 是從每一行讀取的字符串。
我正確使用 getline 嗎? 我是否正確有效地思考了這個問題?
*我在完成這個擴展問題/部分時意識到,getline 可能正在為行尾的 '\\r' 或 '\\n' 字符使用更多內存,或者由於與內存無關的原因,getline 沒有正確處理(根據到我的目的)換行的句子。 getline 不能很好地處理句子/自動換行嗎?
另外,有沒有辦法動態指定 getline 來讀取第一個字符串直到句點 (.) 或換行符 ('\\n'),哪個先出現?
感謝您的時間和考慮。
是的,您正在正確使用getline
。 確保將其用作while
循環或其他條件的條件:
while(std::getline(fileIN, str1, '.')) {
// process str1
}
並且不要犯許多其他人在嘗試使用fileIN.good()
或!fileIN.eof()
或其他任何東西時!fileIN.eof()
(這只會導致頭痛和心痛)。
str1
的緩沖區不需要你清理,因為它是由string
類管理的。 它將根據需要擴展並在變量超出范圍時釋放自身。 這就是我們喜歡標准庫類並在使用原始數組之前三思的原因之一。
此外,對string
的容量沒有人為限制。 唯一的限制因素是系統的可用內存,因此對於虛擬內存,它在 32 位系統上可能略小於 4GB,在 64 位系統上可能略小於 2 64字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.