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 << "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> 的虛受保護成員函式) |