Namespaces
Variants

std::strstream:: strstream

From cppreference.net
strstream ( ) ;
(1) (veraltet in C++98)
(entfernt in C++26)
(2) (veraltet in C++98)
(entfernt in C++26)

Konstruiert einen neuen Eingabe-/Ausgabestrstream und seinen zugrundeliegenden std::strstreambuf .

1) Default-konstruiert den zugrundeliegenden std::strstreambuf , was einen dynamisch wachsenden Puffer erzeugt, und initialisiert die Basisklasse mit der Adresse des strstreambuf-Members.
2) Initialisierte die Basisklasse mit der Adresse des zugrundeliegenden std::strstreambuf Members, der auf eine von zwei möglichen Weisen initialisiert wird, wobei beide eine benutzerdefinierte feste Größe des Arrays verwenden:
a) wenn ( mode & app ) == 0 (das app -Bit ist nicht in mode gesetzt), konstruiert den Puffer durch Aufruf von strstreambuf ( s, n, s ) . Das Verhalten ist undefiniert, wenn weniger als n Elemente im Array vorhanden sind, dessen erstes Element durch s gezeigt wird.
b) if ( mode & app ) ! = 0 (das app -Bit ist in mode gesetzt), konstruiert den Puffer durch Aufruf von strstreambuf ( s, n, s + std:: strlen ( s ) ) . Das Verhalten ist undefiniert, wenn das Array, dessen erstes Element durch s gezeigt wird, weniger als n Elemente enthält oder wenn das Array keine gültige nullterminierte Zeichenfolge enthält.

Inhaltsverzeichnis

Parameter

s - char Array, das als Ausgabepuffer verwendet wird
n - Größe des Arrays für die Ausgabe
mode - gibt den Öffnungsmodus des Streams an. Es handelt sich um einen Bitmask-Typ, die folgenden Konstanten sind definiert (obwohl nur app verwendet wird):
Konstante Erklärung
app vor jedem Schreibvorgang zum Ende des Streams springen
binary im Binärmodus öffnen
in zum Lesen öffnen
out zum Schreiben öffnen
trunc Inhalte des Streams beim Öffnen verwerfen
ate unmittelbar nach dem Öffnen zum Ende des Streams springen
noreplace (C++23) im exklusiven Modus öffnen

Beispiel

#include <iostream>
#include <string>
#include <strstream>
int main()
{
    // dynamischer Puffer
    std::strstream s1;
    s1 << 1 << ' ' << 3.14 << " example" << std::ends;
    std::cout << "Buffer holds: '" << s1.str() << "'\n";
    s1.freeze(false);
    int n;
    double d;
    std::string w;
    s1 >> n >> d >> w;
    std::cout << "Read back: n = " << n
              << ", d = " << d
              << ", w = '" << w << "'\n";
    // statischer Puffer
    char arr[20] = "-1 -3.14 ";
    std::strstream s2(arr, sizeof arr, std::ios_base::app);
    s2 << "another" << std::ends;
    std::cout << "Buffer holds: '" << s2.str() << "'\n";
    s2 >> n >> d >> w;
    std::cout << "Read back: n = " << n
              << ", d = " << d
              << ", w = '" << w << "'\n";
}

Ausgabe:

Buffer holds: '1 3.14 example'
Read back: n = 1, d = 3.14, w = 'example'
Buffer holds: '-1 -3.14 another'
Read back: n = -1, d = -3.14, w = 'another'

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 115 C++98 Überladung (2) berücksichtigte nur den Fall
mode & app == 0 ( == hat höhere Priorität als & )
berücksichtigt Fälle ( mode & app ) == 0
und ( mode & app ) ! = 0

Siehe auch

konstruiert ein strstreambuf Objekt
(öffentliche Elementfunktion von std::strstreambuf )
konstruiert ein istrstream Objekt, optional mit Pufferzuweisung
(öffentliche Elementfunktion von std::istrstream )
konstruiert ein ostrstream Objekt, optional mit Pufferzuweisung
(öffentliche Elementfunktion von std::ostrstream )