命名空间
变体
操作

std::strstreambuf::setbuf

来自 cppreference.cn
< cpp‎ | io‎ | strstreambuf
 
 
 
 
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++ 标准。

DR 应用于 已发布行为 正确行为
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> 的虚拟受保护成员函数) [编辑]