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) | |
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)
- eine End-of-File-Bedingung in der Eingabesequenz auftritt.
- 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. - 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
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 dasnicht 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) | |
| extrahiert formatierte Daten (public member function) | |
| extrahiert Zeichen (public member function) | |
| extrahiert Zeichenblöcke (public member function) |