名前空間
変種
操作

std::strstreambuf::setbuf

From 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++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 66 C++98 setbuf() の効果は「strstreambuf から派生した各クラスごとに別個に定義される操作を実行する」
とされていましたが、strstreambuf から派生したクラスはありません。
効果は
定義されます。
実装定義

[編集] 関連項目

setbuf() を呼び出す
(std::basic_streambuf<CharT,Traits> の public メンバ関数) [編集]
[virtual]
許可されていれば、バッファをユーザー定義配列で置き換える
(std::basic_streambuf<CharT,Traits> の仮想 protected メンバ関数) [編集]
[virtual]
制御文字シーケンスを配列で置き換えようとする
std::basic_stringbuf<CharT,Traits,Allocator> の(仮想保護メンバ関数) [編集]
[virtual]
ユーザー提供のバッファを提供する、またはこのファイルバッファをバッファリングなしにする
(std::basic_filebuf<CharT,Traits>の仮想protectedメンバ関数) [edit]
English 日本語 中文(简体) 中文(繁體)