Namespaces
Variants

std::strstream:: strstream

From cppreference.net
strstream ( ) ;
(1) (устарело в C++98)
(удалено в C++26)
(2) (устарело в C++98)
(удалено в C++26)

Создает новый входной/выходной strstream и его базовый std::strstreambuf .

1) Конструирует базовый объект std::strstreambuf конструктором по умолчанию, что создаёт динамически расширяемый буфер, и инициализирует базовый класс адресом члена strstreambuf.
2) Инициализировал базовый класс адресом базового std::strstreambuf члена, который инициализируется одним из двух возможных способов, оба из которых используют предоставленный пользователем массив фиксированного размера:
а) если ( mode & app ) == 0 (бит app не установлен в mode ), создаёт буфер вызовом strstreambuf ( s, n, s ) . Поведение не определено, если в массиве, первый элемент которого указывается s , содержится менее n элементов.
б) если ( mode & app ) ! = 0 (бит app установлен в mode ), создает буфер путем вызова strstreambuf ( s, n, s + std:: strlen ( s ) ) . Поведение не определено, если в массиве, первый элемент которого указывается s , содержится менее n элементов, или если массив не содержит корректной нуль-терминированной последовательности символов.

Содержание

Параметры

s - char массив для использования в качестве выходного буфера
n - размер массива для использования в выводе
mode - определяет режим открытия потока. Это битовая маска, определены следующие константы (хотя используется только app ):
Константа Объяснение
app переход в конец потока перед каждой записью
binary открытие в бинарном режиме
in открытие для чтения
out открытие для записи
trunc удаление содержимого потока при открытии
ate переход в конец потока сразу после открытия
noreplace (C++23) открытие в эксклюзивном режиме

Пример

#include <iostream>
#include <string>
#include <strstream>
int main()
{
    // динамический буфер
    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";
    // статический буфер
    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";
}

Вывод:

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'

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
LWG 115 C++98 перегрузка (2) рассматривала только случай
mode & app == 0 ( == имеет более высокий приоритет чем & )
рассматривает случаи ( mode & app ) == 0
и ( mode & app ) ! = 0

Смотрите также

создаёт объект strstreambuf
(публичная функция-член std::strstreambuf )
создаёт объект istrstream , опционально выделяя буфер
(публичная функция-член std::istrstream )
создаёт объект ostrstream , опционально выделяя буфер
(публичная функция-член std::ostrstream )