std::strstreambuf::strstreambuf

来自cppreference.com
< cpp‎ | io‎ | strstreambuf
(1)
explicit strstreambuf( std::streamsize alsize = 0 );
(C++11 前)
strstreambuf() : strstreambuf(0) {}
explicit strstreambuf( std::streamsize alsize );
(C++11 起)
strstreambuf( void* (*palloc)(std::size_t), void (*pfree)(void*) );
(2)
strstreambuf( char* gnext, std::streamsize n, char* pbeg = 0 );
(3)
strstreambuf( signed char* gnext, std::streamsize n, signed char* pbeg = 0 );
(4)
strstreambuf( unsigned char* gnext, std::streamsize n, unsigned char* pbeg = 0 );
(5)
strstreambuf( const char* gnext, std::streamsize n );
(6)
strstreambuf( const signed char* gnext, std::streamsize n);
(7)
strstreambuf( const unsigned char* gnext, std::streamsize n );
(8)
1) 构造 std::strstreambuf 对象:通过调用 std::streambuf 的默认构造函数初始化基类,初始化缓冲状态为“动态”(将按需分配缓冲区),初始化已分配大小为提供的 alsize ,初始化分配和解分配函数为空值(将使用 new[]delete[] )。
2) 构造 std::strstreambuf 对象:通过调用 std::streambuf 的默认构造函数初始化基类,初始化缓冲状态为“动态”(将按需分配缓冲区),初始化已分配大小为未指定值,初始化分配函数为 palloc ,解分配函数为 pfree
3-5) 依下列步骤构造 std::strstreambuf 对象:
a) 通过调用 std::streambuf 的默认构造函数初始化基类
b) 初始化缓冲状态为“冻结”(缓冲区为用户提供的固定大小缓冲区)
c) 以下列方式确定用户提供的数组中的元素数:若 n 大于零,则使用 n 。若 n 为,则执行 std::strlen(gnext) 确定缓冲区大小。若 n 为负,则使用 INT_MAX
d) 以下列方式配置 std::basic_streambuf 的指针:若 pbeg 为空指针,则调用 setg(gnext, gnext, gnext + N) 。若 pbeg 不是空指针,则执行 setg(gnext, gnext, pbeg)setp(pbeg, pbeg+N) ,其中 N 是之前确定的数组中的元素数。
6-8)strstreambuf((char*)gnext, n) ,除了在缓冲状态位掩码中设置“常量”(不允许输出到此缓冲区)。

参数

alsize - 动态分配的缓冲区的初始大小
palloc - 指向用户提供的分配函数的指针
pfree - 指向用户提供的解分配函数的指针
gnext - 指向用户提供的数组中获取区起始的指针
pbeg - 指向用户提供的数组中放置区起始的指针
n - 用户提供数组的获取区(若 pbeg 为空)或放置区(若 pbeg 非空)中的字节数

注意

这些构造函数常为 std::strstream 的构造函数所调用

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

DR 应用于 出版时的行为 正确行为
P0935R0 C++11 默认构造函数曾为 explicit 使之为隐式

示例

#include <strstream>
#include <iostream>
 
int main()
{
    std::strstreambuf dyn; // 动态
    std::strstream dyn_s; // 等价的流
    dyn_s << 1.23 << std::ends;
    std::cout << dyn_s.str() << '\n';
    dyn_s.freeze(false);
 
    char buf[10];
    std::strstreambuf user(buf, 10, buf); // 用户提供的输出缓冲区
    std::ostrstream user_s(buf, 10); // 等价的流
    user_s << 1.23 << std::ends;
    std::cout << buf << '\n';
 
    std::strstreambuf lit("1 2 3", 5); // 常量
    std::istrstream lit_s("1 2 3"); // 等价的流
    int i, j, k;
    lit_s >> i >> j >> k;
    std::cout << i << ' ' << j << ' ' << k << '\n';
}

输出:

1.23
1.23
1 2 3

参阅

构造 strstream ,可选地分配缓冲区
(std::strstream 的公开成员函数)