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