命名空间
变体
操作

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++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
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> 的虚受保护成员函数) [编辑]