std::strstreambuf::setbuf
来自cppreference.com
< 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<<"用户提供的缓冲区持有 \""<< 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> 的虚受保护成员函数) |