Namespaces
Variants

std::strstreambuf:: setbuf

From cppreference.net
protected :
virtual streambuf * setbuf ( char * s, std:: streamsize n ) ;
(C++98で非推奨)
(C++26で削除)

s がヌルポインタであり、かつ n がゼロの場合、この関数は何も行いません。

そうでない場合、その効果は実装定義である:一部の実装では何も行わないが、一部の実装ではバッファとして使用されている動的メンバ配列を解放し、サイズ n のユーザー提供の文字配列(その最初の要素は s が指す)の使用を開始する。

この関数はprotected virtualであり、 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 を呼び出す setbuf ( )
( std::basic_streambuf<CharT,Traits> のpublicメンバー関数)
[virtual]
許可されている場合、バッファをユーザー定義の配列で置き換える
( std::basic_streambuf<CharT,Traits> のvirtual protectedメンバー関数)
[virtual]
制御された文字シーケンスを配列で置き換えることを試みる
( std::basic_stringbuf<CharT,Traits,Allocator> のvirtual protectedメンバー関数)
[virtual]
ユーザー提供のバッファを設定するか、このfilebufを非バッファリングモードにする
( std::basic_filebuf<CharT,Traits> のvirtual protectedメンバー関数)