簡體   English   中英

為什么std :: istream :: getline不能在std :: string上運行?

[英]Why does std::istream::getline not operate on std::string?

在C ++中, istream有一個名為getline的方法,它在C風格的字符數組上運行。 我知道還有其他獨立的getline函數可以在istreamstd::string 但為什么單獨的方法呢? 為什么不把它放在istream 為什么istream的getline只能用於C風格的字符串而不是std::string

我認為字符串庫和庫是分開開發的。 我想這就是為什么我們在庫中沒有通用的std::string支持。 雖然已經解決了一點,但現在std::fstream::open正在使用字符串

需要注意的一點是std::istream::getlinestd::getline更安全,所以在某些情況下應該首選。

問題是std::getline沒有檢查將要讀取的字符串的長度。 這意味着惡意代碼(或損壞的數據源)可以通過呈現包含很長行的數據來破壞內存。

使用std::istream::getline您可以讀取多少限制。

我的想法是它是出於性能原因而設計的。 您只需分配一個緩沖區塊,就可以逐行迭代處理。 注意std::getlinestd::string作為參數,在寫入s之前調用s.erase() ,如果行太長,可能會導致s分配更多的緩沖區。

暫無
暫無

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

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