Namespaces
Variants

std::basic_istream<CharT,Traits>:: getline

From cppreference.net
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 , до тех пор пока не произойдёт любое из следующих условий (проверяемых в указанном порядке):

  1. в потоке ввода возникает условие конца файла.
  2. следующий доступный символ c является разделителем, как определено Traits :: eq ( c, delim ) . Разделитель извлекается (в отличие от basic_istream::get() ) и учитывается в gcount() , но не сохраняется.
  3. count неположителен, или count - 1 символов было извлечено ( setstate ( failbit ) вызывается в этом случае).

Если функция не извлекает символы, ​ failbit устанавливается в локальном состоянии ошибки до вызова setstate() .

В любом случае, если count > 0 , тогда он сохраняет нулевой символ CharT ( ) в следующую последовательную позицию массива и обновляет gcount() .

Содержание

Примечания

Поскольку условие №2 проверяется до условия №3, входная строка, точно соответствующая размеру буфера, не вызывает установку failbit .

Поскольку завершающий символ считается извлеченным символом, пустая входная строка не вызывает установку failbit .

Параметры

s - указатель на строку символов для хранения извлекаемых символов
count - размер строки символов, на которую указывает s
delim - разделительный символ, при котором останавливается извлечение. Извлекается, но не сохраняется.

Возвращаемое значение

* this

Исключения

failure if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

Если внутренняя операция выбрасывает исключение, оно перехватывается и 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

Смотрите также

чтение данных из потока ввода-вывода в строку
(шаблон функции)
извлекает форматированные данные
(публичная функция-член)
извлекает символы
(публичная функция-член)
извлекает блоки символов
(публичная функция-член)