Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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

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.

[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) [bearbeiten]
holt die Anzahl der im Get-Bereich sofort verfügbaren Zeichen
(öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) [bearbeiten]