Namespaces
Variants

std::strstreambuf:: setbuf

From cppreference.net
protected :
virtual streambuf * setbuf ( char * s, std:: streamsize n ) ;
(C++98 中已弃用)
(C++26 中移除)

如果 s 是空指针且 n 为零,则此函数不产生任何效果。

否则,效果由实现定义:某些实现不执行任何操作,而某些实现会释放用作缓冲区的动态成员数组,并开始使用用户提供的、大小为 n 的字符数组,该数组的首元素由 s 指向。

此函数为受保护的虚函数,只能通过 pubsetbuf() 调用,或从用户定义的派生自 std::strstreambuf 类的成员函数中调用。

目录

参数

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

返回值

this

示例

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

#include <iostream>
#include <strstream>
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"

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

问题报告 应用于 发布时的行为 正确行为
LWG 66 C++98 setbuf() 的效果是"执行针对每个从 strstreambuf 派生的类分别定义的操作",
但实际上不存在从 strstreambuf 派生的类
效果由
实现定义

参见

调用 setbuf ( )
(std::basic_streambuf<CharT,Traits> 的公开成员函数)
[virtual]
若允许则用用户定义数组替换缓冲区
(std::basic_streambuf<CharT,Traits> 的虚受保护成员函数)
[virtual]
尝试用数组替换受控字符序列
(std::basic_stringbuf<CharT,Traits,Allocator> 的虚受保护成员函数)
[virtual]
提供用户指定的缓冲区或使此文件流无缓冲
(std::basic_filebuf<CharT,Traits> 的虚受保护成员函数)