std::ostrstream::ostrstream

来自cppreference.com
< cpp‎ | io‎ | ostrstream
ostrstream();
(1)
ostrstream(char* s, int n, std::ios_base::openmode mode = std::ios_base::out);
(2)

构造新的输出 strstream 及其底层 std::strstreambuf

1) 默认构造底层 std::strstreambuf ,这创建动态成长的缓冲区,并以该 strstreambuf 成员的地址初始化基类。
2) 以底层 std::strstreambuf 成员的地址初始化基类,该成员以二种可能方式之一初始化,两者都写入用户提供的数组:
a)mode 中未设置 app 位,则通过调用 strstreambuf(s, n, s) 构造缓冲。若首元素为 s 所指向的数组中元素少于 n 个,则行为未定义。
b)mode 中设置了 app 位,则通过调用 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 <strstream>
 
int main()
{
    std::ostrstream s1; // 动态缓冲区
    s1 << 1 << ' ' << 3.14 << " example\n" << std::ends;
    std::cout << s1.str();
    s1.freeze(false);
 
    char arr[15] = "Hello";
 
    std::ostrstream s2(arr, sizeof arr, std::ios_base::app);
    s2 << ", world!" << std::ends;
    std::cout << s2.str() << '\n';
    std::cout << arr << '\n'; // 流使用提供的数组
}

输出:

1 3.14 example
Hello, world!
Hello, world!

参阅

构造 strstreambuf 对象
(std::strstreambuf 的公开成员函数)
构造 istrstream 对象,部分情况下会分配缓冲区
(std::istrstream 的公开成员函数)
构造 strstream 对象,部分情况下会分配缓冲区
(std::strstream 的公开成员函数)