Namespaces
Variants

std::strstream:: strstream

From cppreference.net
strstream ( ) ;
(1) (obsoleto en C++98)
(eliminado en C++26)
(2) (obsoleto en C++98)
(eliminado en C++26)

Construye un nuevo strstream de entrada/salida y su subyacente std::strstreambuf .

1) Construye por defecto el subyacente std::strstreambuf , lo cual crea un búfer de crecimiento dinámico, e inicializa la clase base con la dirección del miembro strstreambuf.
2) Inicializó la clase base con la dirección del miembro subyacente std::strstreambuf , que se inicializa de una de las dos formas posibles, ambas utilizan un arreglo de tamaño fijo proporcionado por el usuario:
a) si ( mode & app ) == 0 (el bit app no está establecido en mode ), construye el búfer llamando a strstreambuf ( s, n, s ) . El comportamiento es indefinido si hay menos de n elementos en el array cuyo primer elemento está apuntado por s .
b) si ( mode & app ) ! = 0 (el bit app está establecido en mode ), construye el buffer llamando a strstreambuf ( s, n, s + std:: strlen ( s ) ) . El comportamiento es indefinido si hay menos de n elementos en el array cuyo primer elemento está apuntado por s o si el array no contiene una secuencia de caracteres válida terminada en nulo.

Contenidos

Parámetros

s - char array a utilizar como búfer de salida
n - tamaño del array a utilizar para la salida
mode - especifica el modo de apertura del flujo. Es un tipo de máscara de bits, se definen las siguientes constantes (aunque solo se utiliza app ):
Constante Explicación
app posicionarse al final del flujo antes de cada escritura
binary abrir en modo binario
in abrir para lectura
out abrir para escritura
trunc descartar el contenido del flujo al abrir
ate posicionarse al final del flujo inmediatamente después de abrir
noreplace (C++23) abrir en modo exclusivo

Ejemplo

#include <iostream>
#include <string>
#include <strstream>
int main()
{
    // búfer dinámico
    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";
    // búfer estático
    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";
}

Salida:

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'

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 115 C++98 la sobrecarga (2) solo consideraba el caso
mode & app == 0 ( == tiene mayor precedencia que & )
considera los casos ( mode & app ) == 0
y ( mode & app ) ! = 0

Véase también

construye un objeto strstreambuf
(función miembro pública de std::strstreambuf )
construye un objeto istrstream , opcionalmente asignando el búfer
(función miembro pública de std::istrstream )
construye un objeto ostrstream , opcionalmente asignando el búfer
(función miembro pública de std::ostrstream )