std::basic_istream<CharT,Traits>:: getline
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count
)
;
|
(1) | |
|
basic_istream
&
getline
(
char_type
*
s,
std::
streamsize
count, char_type delim
)
;
|
(2) | |
Извлекает символы из потока до конца строки или указанного разделителя delim .
Первая перегрузка эквивалентна getline ( s, count, widen ( ' \n ' ) ) .
Ведёт себя как UnformattedInputFunction . После создания и проверки сторожевого объекта извлекает символы из * this и сохраняет их в последовательных ячейках массива, первый элемент которого указывается s , до тех пор пока не произойдёт любое из следующих условий (проверяемых в указанном порядке):
- в потоке ввода возникает условие конца файла.
-
следующий доступный символ
c
является разделителем, как определено
Traits
::
eq
(
c, delim
)
. Разделитель извлекается (в отличие от
basic_istream::get()) и учитывается в gcount() , но не сохраняется. - count неположителен, или count - 1 символов было извлечено ( setstate ( failbit ) вызывается в этом случае).
Если функция не извлекает символы,
failbit
устанавливается в локальном состоянии ошибки до вызова
setstate()
.
В любом случае, если count > 0 , тогда он сохраняет нулевой символ CharT ( ) в следующую последовательную позицию массива и обновляет gcount() .
Содержание |
Примечания
Поскольку условие №2 проверяется до условия №3, входная строка, точно соответствующая размеру буфера, не вызывает установку
failbit
.
Поскольку завершающий символ считается извлеченным символом, пустая входная строка не вызывает установку
failbit
.
Параметры
| s | - | указатель на строку символов для хранения извлекаемых символов |
| count | - | размер строки символов, на которую указывает s |
| delim | - | разделительный символ, при котором останавливается извлечение. Извлекается, но не сохраняется. |
Возвращаемое значение
* this
Исключения
Если внутренняя операция выбрасывает исключение, оно перехватывается и
badbit
устанавливается. Если
exceptions()
установлен для
badbit
, исключение выбрасывается повторно.
Пример
#include <array> #include <iostream> #include <sstream> #include <vector> int main() { std::istringstream input("abc|def|gh"); std::vector<std::array<char, 4>> v; // примечание: следующий цикл завершается, когда std::ios_base::operator bool() // для потока, возвращенного из getline(), возвращает false for (std::array<char, 4> a; input.getline(&a[0], 4, '|');) v.push_back(a); for (auto& a : v) std::cout << &a[0] << '\n'; }
Вывод:
abc def gh
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 531 | C++98 |
std::getline
could not handle the
case where count is non-positive |
no character is
extracted in this case |
Смотрите также
|
чтение данных из потока ввода-вывода в строку
(шаблон функции) |
|
|
извлекает форматированные данные
(публичная функция-член) |
|
|
извлекает символы
(публичная функция-член) |
|
|
извлекает блоки символов
(публичная функция-член) |