Namensräume
Varianten
Aktionen

std::basic_istream<CharT,Traits>:getline

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
basic_istream& getline( char_type* s, std::streamsize count );
(1)
basic_istream& getline( char_type* s, std::streamsize count, char_type delim );
(2)

Extrahiert Zeichen aus dem Stream, bis das Zeilenende oder der angegebene Trenner delim erreicht ist.

Die erste Überladung ist äquivalent zu getline(s, count, widen('\n')).

Verhält sich wie eine UnformattedInputFunction. Nach dem Konstruieren und Überprüfen des Sentry-Objekts werden Zeichen aus *this extrahiert und in aufeinanderfolgenden Speicherplätzen des Arrays gespeichert, dessen erstes Element von s gezeigt wird, bis eine der folgenden Bedingungen eintritt (in dieser Reihenfolge getestet)

  1. eine End-of-File-Bedingung in der Eingabesequenz auftritt.
  2. das nächste verfügbare Zeichen c der Trenner ist, wie durch Traits::eq(c, delim) bestimmt. Der Trenner wird extrahiert (im Gegensatz zu basic_istream::get()) und zu gcount() gezählt, aber nicht gespeichert.
  3. count nicht-positiv ist oder count - 1 Zeichen extrahiert wurden (setstate(failbit) wird in diesem Fall aufgerufen).

Wenn die Funktion keine Zeichen extrahiert, wird `failbit` im lokalen Fehlerzustand gesetzt, bevor setstate() aufgerufen wird.

In jedem Fall, wenn count > 0, wird ein Nullzeichen CharT() an die nächste Speicherstelle des Arrays gespeichert und gcount() aktualisiert.

Inhalt

[bearbeiten] Hinweise

Da Bedingung Nr. 2 vor Bedingung Nr. 3 geprüft wird, löst eine Eingabezeile, die genau in den Puffer passt, kein failbit aus.

Da das abschließende Zeichen als extrahiertes Zeichen gezählt wird, löst eine leere Eingabezeile kein failbit aus.

[bearbeiten] Parameter

s - Zeiger auf die Zeichenkette, in der die Zeichen gespeichert werden sollen
zählt - Größe der Zeichenkette, auf die s zeigt
delim - Trennzeichen, an dem die Extraktion stoppt. Es wird extrahiert, aber nicht gespeichert.

[bearbeiten] Rückgabewert

*this

[bearbeiten] Ausnahmen

failure, wenn ein Fehler aufgetreten ist (der Fehlerstatus-Flag ist nicht goodbit) und exceptions() für diesen Zustand zum Werfen gesetzt ist.

Wenn eine interne Operation eine Ausnahme auslöst, wird diese abgefangen und badbit gesetzt. Wenn exceptions() für badbit gesetzt ist, wird die Ausnahme erneut ausgelöst.

[bearbeiten] Beispiel

#include <array>
#include <iostream>
#include <sstream>
#include <vector>
 
int main()
{
    std::istringstream input("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 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';
}

Ausgabe

abc
def
gh

[bearbeiten] Fehlermeldungen

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 531 C++98 std::getline konnte das
nicht behandeln, wenn count nicht-positiv ist
kein Zeichen
in diesem Fall extrahiert wird

[bearbeiten] Siehe auch

liest Daten aus einem E/A-Stream in einen String
(function template) [edit]
extrahiert formatierte Daten
(public member function) [bearbeiten]
extrahiert Zeichen
(public member function) [bearbeiten]
extrahiert Zeichenblöcke
(public member function) [bearbeiten]