![](/img/trans.png)
[英]std::getline from istream into string[] multiple times blank
[英]Why does std::istream::getline not operate on std::string?
在C ++中, istream
有一個名為getline
的方法,它在C風格的字符數組上運行。 我知道還有其他獨立的getline
函數可以在istream
和std::string
。 但為什么單獨的方法呢? 為什么不把它放在istream
? 為什么istream
的getline只能用於C風格的字符串而不是std::string
?
我認為字符串庫和流庫是分開開發的。 我想這就是為什么我們在流庫中沒有通用的std::string
支持。 雖然已經解決了一點,但現在std::fstream::open
正在使用字符串 。
需要注意的一點是std::istream::getline
比std::getline
更安全,所以在某些情況下應該首選。
問題是std::getline
沒有檢查將要讀取的字符串的長度。 這意味着惡意代碼(或損壞的數據源)可以通過呈現包含很長行的數據來破壞內存。
使用std::istream::getline
您可以讀取多少限制。
我的想法是它是出於性能原因而設計的。 您只需分配一個緩沖區塊,就可以逐行迭代處理。 注意std::getline
以std::string
作為參數,在寫入s
之前調用s.erase()
,如果行太長,可能會導致s
分配更多的緩沖區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.