2012-10-11 58 views
1

我該如何驗證std::istream::getline()是否達到了分隔符,而不是最大化輸入緩衝區?C++:getline()讀完整行嗎?

我意識到我可以使用gcount()來確定是否讀取了比緩衝區更少的字節,但如果要讀取的行與緩衝區完全一樣長,該怎麼辦?到達\n看起來完全一樣,沒有達到\n

回答

0

終止的條件std::istream::getline()非常精確:如果由於n - 1被存儲但沒有到達換行符而導致功能停止,則會設置標誌std::ios_base::failbit。也就是說,您可以檢查流的狀態以確定是否到達換行符。

這就是說,除非你需要防止你的數據的敵對源(如互聯網連接發送給您的數據,直到你耗盡內存,一切就只有一個行),你應該使用std::string版本:

std::string line; 
std::getline(in, line); 
4

根本不使用會員getline。下面將總是工作,使用免費的功能:(。回答你的問題,實際是你必須在一個循環中使用成員 - getline但是何苦)

#include <string> 

std::string line; 

if (!std::getline(infile, line)) { /* error */ } 

// entire line in "line" 

+0

+1。這就是我將要使用的。感謝您的迅速回答。 – JellicleCat