我該如何驗證std::istream::getline()
是否達到了分隔符,而不是最大化輸入緩衝區?C++:getline()讀完整行嗎?
我意識到我可以使用gcount()
來確定是否讀取了比緩衝區更少的字節,但如果要讀取的行與緩衝區完全一樣長,該怎麼辦?到達\n
看起來完全一樣,沒有達到\n
。
我該如何驗證std::istream::getline()
是否達到了分隔符,而不是最大化輸入緩衝區?C++:getline()讀完整行嗎?
我意識到我可以使用gcount()
來確定是否讀取了比緩衝區更少的字節,但如果要讀取的行與緩衝區完全一樣長,該怎麼辦?到達\n
看起來完全一樣,沒有達到\n
。
終止的條件std::istream::getline()
非常精確:如果由於n - 1
被存儲但沒有到達換行符而導致功能停止,則會設置標誌std::ios_base::failbit
。也就是說,您可以檢查流的狀態以確定是否到達換行符。
這就是說,除非你需要防止你的數據的敵對源(如互聯網連接發送給您的數據,直到你耗盡內存,一切就只有一個行),你應該使用std::string
版本:
std::string line;
std::getline(in, line);
根本不使用會員getline
。下面將總是工作,使用免費的功能:(。回答你的問題,實際是你必須在一個循環中使用成員 - getline
但是何苦)
#include <string>
std::string line;
if (!std::getline(infile, line)) { /* error */ }
// entire line in "line"
+1。這就是我將要使用的。感謝您的迅速回答。 – JellicleCat