Namespaces
Variants

std::strstream:: strstream

From cppreference.net
strstream ( ) ;
(1) (obsolète en C++98)
(supprimé en C++26)
(2) (obsolète en C++98)
(supprimé en C++26)

Construit un nouveau flux d'entrée/sortie strstream et son std::strstreambuf sous-jacent.

1) Construit par défaut le std::strstreambuf sous-jacent, ce qui crée un tampon à croissance dynamique, et initialise la classe de base avec l'adresse du membre strstreambuf.
2) Initialisé la classe de base avec l'adresse du membre std::strstreambuf sous-jacent, qui est initialisé de l'une des deux manières possibles, toutes deux utilisant un tableau de taille fixe fourni par l'utilisateur :
a) si ( mode & app ) == 0 (le bit app n'est pas défini dans mode ), construit le tampon en appelant strstreambuf ( s, n, s ) . Le comportement est indéfini s'il y a moins de n éléments dans le tableau dont le premier élément est pointé par s .
b) si ( mode & app ) ! = 0 (le bit app est défini dans mode ), construit le tampon en appelant strstreambuf ( s, n, s + std:: strlen ( s ) ) . Le comportement est indéfini s'il y a moins de n éléments dans le tableau dont le premier élément est pointé par s ou si le tableau ne contient pas une séquence de caractères valide terminée par un caractère nul.

Table des matières

Paramètres

s - char tableau à utiliser comme tampon de sortie
n - taille du tableau à utiliser pour la sortie
mode - spécifie le mode d'ouverture du flux. C'est un type masque de bits, les constantes suivantes sont définies (bien que seul app soit utilisé) :
Constante Explication
app se positionner en fin de flux avant chaque écriture
binary ouvrir en mode binaire
in ouvrir en lecture
out ouvrir en écriture
trunc vider le contenu du flux à l'ouverture
ate se positionner en fin de flux immédiatement après l'ouverture
noreplace (C++23) ouvrir en mode exclusif

Exemple

#include <iostream>
#include <string>
#include <strstream>
int main()
{
    // tampon dynamique
    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";
    // tampon statique
    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";
}

Sortie :

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'

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement tel que publié Comportement correct
LWG 115 C++98 la surcharge (2) ne considérait que le cas
mode & app == 0 ( == a une priorité plus élevée que & )
considère les cas ( mode & app ) == 0
et ( mode & app ) ! = 0

Voir aussi

construit un objet strstreambuf
(fonction membre publique de std::strstreambuf )
construit un objet istrstream , allouant éventuellement le tampon
(fonction membre publique de std::istrstream )
construit un objet ostrstream , allouant éventuellement le tampon
(fonction membre publique de std::ostrstream )