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 << "用户提供的缓冲区持有 \"" << a << "\"\n";
}

可能的输出:

用户提供的缓冲区持有 "Test string"

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 66 C++98 setbuf() 的效果是“执行分别在每个从 strstreambuf 派生
的类中定义的操作”,但是没有从 strstreambuf 派生的类
效果由实现定义

参阅

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