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> 的虚受保护成员函数) |