名前空間
変種
操作

std::strstreambuf::strstreambuf

提供: cppreference.com
< cpp‎ | io‎ | strstreambuf
 
 
入出力ライブラリ
入出力マニピュレータ
Cスタイルの入出力
バッファ
(C++98で非推奨)
ストリーム
抽象
ファイル入出力
文字列入出力
配列入出力
(C++98で非推奨)
(C++98で非推奨)
(C++98で非推奨)
同期化出力
エラーカテゴリインタフェース
(C++11)
 
 
(1)
explicit strstreambuf( std::streamsize alsize = 0 );
(C++11未満)
strstreambuf() : strstreambuf(0) {}
explicit strstreambuf( std::streamsize alsize );
(C++11以上)
strstreambuf( void* (*palloc)(std::size_t), void (*pfree)(void*) );
(2)
strstreambuf( char* gnext, std::streamsize n, char* pbeg = 0 );
(3)
strstreambuf( signed char* gnext, std::streamsize n, signed char* pbeg = 0 );
(4)
strstreambuf( unsigned char* gnext, std::streamsize n, unsigned char* pbeg = 0 );
(5)
strstreambuf( const char* gnext, std::streamsize n );
(6)
strstreambuf( const signed char* gnext, std::streamsize n);
(7)
strstreambuf( const unsigned char* gnext, std::streamsize n );
(8)
1) std::strstreambuf オブジェクトを構築します。 std::streambuf のデフォルトコンストラクタを呼ぶことによって基底クラスを初期化し、バッファの状態を「動的」(バッファは必要に応じて確保される) に初期化し、確保されたサイズを提供された alsize に初期化し、確保関数および解放関数をヌル (new[] および delete[] を使用する) に初期化します。
2) std::strstreambuf オブジェクトを構築します。 std::streambuf のデフォルトコンストラクタを呼ぶことによって基底クラスを初期化し、バッファの状態を「動的」(バッファは必要に応じて確保される) に初期化し、確保されたサイズを未規定の値に初期化し、確保関数を palloc に、解放関数を pfree に初期化します。
3-5) 以下のステップで std::strstreambuf オブジェクトを構築します。
a) std::streambuf のデフォルトコンストラクタを呼ぶことによって基底クラスを初期化します。
b) バッファの状態を「定数」(バッファはユーザ提供の固定サイズのバッファ) に初期化します。
c) ユーザ提供の配列の要素数を以下のように決定します。 n がゼロより大きい場合は、 n が使用されます。 n がゼロの場合は、バッファのサイズを決定するために std::strlen(gnext) が実行されます。 n が負の場合は、 INT_MAX が使用されます。
d) std::basic_streambuf のポインタを以下のように設定します。 pbeg がヌルポインタの場合は、 setg(gnext, gnext, gnext + N) を呼びます。 pbeg がヌルポインタでない場合は、 setg(gnext, gnext, pbeg) および setp(pbeg, pbeg+N) 実行します。 ただし N は先程決定された配列の要素数です。
6-8) strstreambuf((char*)gnext, n) と同じですが、バッファの状態のビットマスクの「定数」ビット (このバッファへの出力はできない) がセットされます。

目次

[編集] 引数

alsize - 動的に確保されるバッファの初期サイズ
palloc - ユーザ提供の確保関数へのポインタ
pfree - ユーザ提供の解放関数へのポインタ
gnext - ユーザ提供の配列内の get 領域の先頭へのポインタ
pbeg - ユーザ提供の配列内の put 領域の先頭へのポインタ
n - ユーザ提供の配列内の get 領域 (pbeg がヌルの場合) または put 領域 (pbeg がヌルでない場合) のバイト数

[編集] ノート

これらのコンストラクタは一般的には std::strstream のコンストラクタによって呼ばれます。

[編集] 欠陥報告

以下の動作変更欠陥報告は以前に発行された C++ 標準に遡って適用されました。

DR 適用先 発行時の動作 正しい動作
P0935R0 C++11 default constructor was explicit made implicit

[編集]

#include <strstream>
#include <iostream>
 
int main()
{
    std::strstreambuf dyn; // dynamic
    std::strstream dyn_s; // equivalent stream
    dyn_s << 1.23 << std::ends;
    std::cout << dyn_s.str() << '\n';
    dyn_s.freeze(false);
 
    char buf[10];
    std::strstreambuf user(buf, 10, buf); // user-provided output buffer
    std::ostrstream user_s(buf, 10); // equivalent stream
    user_s << 1.23 << std::ends;
    std::cout << buf << '\n';
 
    std::strstreambuf lit("1 2 3", 5); // constant
    std::istrstream lit_s("1 2 3"); // equivalent stream
    int i, j, k;
    lit_s >> i >> j >> k;
    std::cout << i << ' ' << j << ' ' << k << '\n';
}

出力:

1.23
1.23
1 2 3

[編集] 関連項目

strstream を構築し、オプションでバッファを確保します
(std::strstreamのパブリックメンバ関数) [edit]