From cppreference.com
basic_istream&getline(char_type*s,std::streamsizecount); (1) basic_istream&getline(char_type*s,std::streamsizecount,char_typedelim); (2) Extracts characters from stream until end of line or the specified delimiter delim.
The first overload is equivalent to getline(s,count,widen('\n')).
Behaves as
. After constructing and checking the sentry object, extracts characters from *this and stores them in successive locations of the array whose first element is pointed to by s, until any of the following occurs (tested in the order shown):
end of file condition occurs in the input sequence.
the next available character c is the delimiter, as determined by Traits::eq(c,delim). The delimiter is extracted (unlike
) and counted towards
, but is not stored.
count is non-positive, or count-1 characters have been extracted (setstate(failbit) is called in this case).
If the function extracts no characters, failbit is set in the local error state before
is called.
In any case, if count>0, it then stores a null character CharT() into the next successive location of the array and updates
.
Notes
Because condition #2 is tested before condition #3, the input line that exactly fits the buffer does not trigger failbit.
Because the terminating character is counted as an extracted character, an empty input line does not trigger failbit.
Parameters
s - pointer to the character string to store the characters to count - size of character string pointed to by sdelim - delimiting character to stop the extraction at. It is extracted but not stored. Return value
*this
Exceptions
if an error occurred (the error state flag is not
) and
is set to throw for that state.
If an internal operation throws an exception, it is caught and
is set. If
is set for badbit, the exception is rethrown.
Example
Run this code
#include<array>#include<iostream>#include<sstream>#include<vector>intmain(){std::istringstreaminput("abc|def|gh");std::vector<std::array<char,4>>v;// note: the following loop terminates when std::ios_base::operator bool()// on the stream returned from getline() returns falsefor(std::array<char,4>a;input.getline(&a[0],4,'|');)v.push_back(a);for(auto&a:v)std::cout<<&a[0]<<'\n';}Output:
abc def gh Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR Applied to Behavior as published Correct behavior
C++98 std::getline could not handle the
case where count is non-positive no character is
extracted in this case See also
read data from an I/O stream into a string
(function template)
extracts formatted data
(public member function)
extracts characters
(public member function)
extracts blocks of characters
(public member function)