std::strstreambuf:: setbuf
From cppreference.net
<
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> 的虚受保护成员函数) |