std::basic_istream<CharT,Traits>::readsome
| std::streamsize readsome( char_type* s, std::streamsize count ); |
||
Extrahiert bis zu count sofort verfügbare Zeichen aus dem Eingabestrom. Die extrahierten Zeichen werden im Zeichen-Array gespeichert, auf das s zeigt.
Verhält sich wie UnformattedInputFunction. Nach der Konstruktion und Überprüfung des Sentry-Objekts,
- Wenn rdbuf()->in_avail() == -1, ruft setstate(eofbit) auf und extrahiert keine Zeichen.
- Wenn rdbuf()->in_avail() == 0, werden keine Zeichen extrahiert.
- Wenn rdbuf()->in_avail() > 0, werden std::min(rdbuf()->in_avail(), count) Zeichen extrahiert und in aufeinanderfolgende Positionen des Zeichen-Arrays gespeichert, auf dessen erstes Element s zeigt.
Inhalt |
[edit] Parameter
| s | - | Zeiger auf das Zeichen-Array, in dem die Zeichen gespeichert werden sollen |
| zählt | - | Maximale Anzahl zu lesender Zeichen |
[edit] Rückgabewert
Die Anzahl der tatsächlich extrahierten Zeichen.
[edit] 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.
[edit] Hinweise
Das Verhalten dieser Funktion ist stark implementierungsspezifisch. Beispielsweise führt die Verwendung von readsome() mit std::ifstream zu erheblichen, implementierungsspezifischen Ergebnissen. Einige Bibliotheksimplementierungen füllen den zugrunde liegenden filebuf sofort mit Daten, wenn std::ifstream eine Datei öffnet. Das bedeutet, dass readsome() immer Daten liest und sogar die gesamte Datei lesen könnte. Bei anderen Implementierungen liest std::ifstream erst aus einer Datei, wenn eine Eingabeoperation aufgerufen wird. Das bedeutet, dass der Aufruf von readsome() unmittelbar nach dem Öffnen der Datei niemals Zeichen extrahiert. Ebenso kann der Aufruf von std::cin.readsome() alle ausstehenden, unverarbeiteten Konsoleneingaben zurückgeben oder immer null zurückgeben und keine Zeichen extrahieren.
[edit] Beispiel
#include <cassert> #include <iostream> #include <sstream> int main() { char c[10] = "*********"; // c[9] == '\0' // std::stringbuf makes its entire buffer available for unblocking read std::istringstream input("This is sample text."); auto r = input.readsome(c, 5); // reads 'This ' and stores in c[0] .. c[4] assert(r == 5); std::cout << c << '\n'; r = input.readsome(c, 9); // reads 'is sample' and stores in c[0] .. c[8] assert(r == 9); std::cout << c << '\n'; }
Ausgabe
This **** is sample
[edit] Siehe auch
| extrahiert Zeichenblöcke (public member function) | |
| holt die Anzahl der im Get-Bereich sofort verfügbaren Zeichen (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) |