std::strstream:: strstream
From cppreference.net
|
strstream
(
)
;
|
(1) |
(obsolète en C++98)
(supprimé en C++26) |
|
strstream
(
char
*
s,
int
n,
std::
ios_base
::
openmode
mode
=
std:: ios_base :: in | std:: ios_base :: out ) ; |
(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é) :
|
Exemple
Exécuter ce code
#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
)
|