名稱空間
變體
操作

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> 的虛受保護成員函式) [編輯]