std::strstreambuf::setbuf

来自cppreference.com
< cpp‎ | io‎ | strstreambuf
protected:
virtual streambuf<char>* setbuf(char* s, std::streamsize n);

s 为空指针且 n 为零,则函数无效果。

否则,效果为实现定义:一些实现不做任何事,而一些实现解分配动态成员数组并使用用户提供的大小为 n ,首元素为 s 所指向的数组。

此函数为受保护虚,它仅可通过 pubsetbuf() 或从导出自 std::strstreambuf 的用户定义类调用。

参数

s - 指向用户提供缓冲区中首字节的指针
n - 用户提供缓冲区中的字节数

返回值

this

示例

检查是否在动态 strstream 上支持 setbuf() 的实现测试(输出以 Sun Studio 获得)

#include <strstream>
#include <iostream>
 
int main()
{
    char a[100] = {};
    std::strstream str;
    str.rdbuf()->pubsetbuf(a, sizeof a);
    str << "Test string" << std::ends;
    std::cout << "user-provided buffer holds '" << a << "'\n";
}

可能的输出:

user-provided buffer holds 'Test string'

参阅

调用 setbuf()
(std::basic_streambuf<CharT,Traits> 的公开成员函数)
[虚]
若容许则以用户定义数组替换缓冲区
(std::basic_streambuf<CharT,Traits> 的虚受保护成员函数)
[虚]
试图以数组替换受控字符序列
(std::basic_stringbuf<CharT,Traits,Allocator> 的虚受保护成员函数)
[虚]
提供用户供应的缓冲区,或将此 filebuf 转变为无缓冲
(std::basic_filebuf<CharT,Traits> 的虚受保护成员函数)