STRSTREAM(3C++)

名前
strstream - 文字配列を用いた入出力のためのストリームクラス

形式

#include <strstream.h>

class ios {
public:
	enum open_mode  { in, out, ate, app, trunc, nocreate, noreplace };
	// 残りの部分については ios(3C++) を参照 ...
};

#include <strstream.h> // <iostream.h> を取り込む

class  strstreambuf : public streambuf {
	// strstreambuf(3C++) を参照 ...
};

class strstreambase : virtual public ios {
	// Xstream クラスの定義 ...
};

class istrstream : public strstreambase, public istream {
public:
	istrstream(char* ptr);
	istrstream(char* ptr, int len);
	strstreambuf* rdbuf();
};

class ostrstream : public strstreambase, public ostream {
public:
	ostrstream(char* ptr, int len, int omode=ios::out);
	ostrstream();
	strstreambuf* rdbuf();
	int	pcount();
	char*	str();
};

class strstream : public strstreambase, public iostream {
public:
	strstream();
	strstream(char* ptr, int len, int omode);
	strstreambuf* rdbuf();
	char*	str();
};

機能説明

クラス istrstream、ostrstream、strstream は、メモリー内の文字配列を用いた入出力操作のためにクラス istream、ostream、iostream をそれぞれ特殊化したものです。 すなわち、対応する streambuf は strstreambuf です。

補足クラス strstreambase は、主に共通の関数を提供します。 詳細については省略します。

  istrstream のメンバー関数

istrstream(ptr)
    ptr が NULL で終わる文字配列を指していると想定します。 この文字配列は、入力元として機能します。 NULL は入力の一部にはなりません。 この配列の範囲内で、 seekg() を用いたシークを行うことができます。

istrstream(ptr, len)
    ptr が長さ len の文字配列を指していると想定します。 この文字配列は、入力元として機能します。 この配列の範囲内で、 seekg() を用いたシークを行うことができます。

strstreambuf* ssbp = iss.rdbuf()
    iss に対応する strstreambuf を指すポインタを返します。 この関数は、戻り値の型が strstreambuf* であることを除き、 基底クラス版と同じ働きをします。

  ostrstream のメンバー関数

ostrstream()
    動的 (拡張可能) な文字配列を使用する空の出力ストリームを 作成します ( ssbuf(3C++) 参照)。 配列の現在の境界内でシークを行うことができます。 おそらく、このストリームは後に str() (下記参照) を介して char* に変換されます。

ostrstream(ptr, len, mode)
    ptr から始まる len 文字の静的な (拡張できない) 文字配列を使用する 出力ストリームを作成します。 mode の ios::ate ビットまたは ios::app ビットがセットされている場合 ( ios(3C++) 参照)、配列は ptr から始まり NULL で終わる文字列と想定されます。 文字は NULL 文字から順に格納され、 格納される文字数が len 文字を超えることはありません。 mode でこれらのビットがセットされていない場合、 配列にはデータが含まれていないと想定され、文字は ptr の位置から 格納されます。この配列の範囲内で、シークを行うことができます。

strstreambuf* ssbp = oss.rdbuf()
    oss に対応する strstreambuf を指すポインタを返します。 これは、戻り値の型が strstreambuf* であることを除き、 基底クラス版と同じ働きをします。

int n = oss.pcount()
    配列内に格納されている文字数を返します。 この関数は特に、配列にバイナリデータが含まれていたり、 NULL で終わっていない場合に利用します。

char* ptr = oss.str()
    対応する配列の開始点を指すポインタを返し、 ストリームをフリーズ ( strstreambuf(3C++) 参照) します。 配列が動的に割り当てられている場合は、 その時点で自動的に削除されたり、NULL で終了するのではなく、 拡張できなくなります ( strstreambuf の freeze() を参照)。 str() が呼び出されるまでは、 動的に割り当てられている配列は 対応するストリーム・バッファが破棄されると自動的に解放されます。 呼び出し以後、配列とそれをいつ解放するかはユーザーが制御しなければなりません。

  strstream のメンバー関数

strstream()
    動的な (拡張可能な) 文字配列を使用する双方向の空のストリームを 作成します ( ssbuf(3C++) 参照)。この配列の現在の境界内で、シークを行うことができます。

strstream(ptr, len, mode)
    ptr から始まる len 文字の静的な (拡張できない) 文字配列を用いた 双方向のストリームを作成します。 mode の ios::ate ビットまたは ios::app ビットがセットされていると ( ios(3C++) 参照)、配列は ptr で始まり NULL で終わる文字列を含んでいると想定されます。 文字は NULL 文字から順に格納され、 格納される文字数が len 文字を超えることはありません。 mode でこれらのビットがセットされていない場合、 配列にはデータが含まれていないと想定され、文字は ptr の位置から 格納されます。この配列の範囲内で、シークを行うことができます。

strstreambuf* ssbp = ss.rdbuf()
    ss に対応する strstreambuf を指すポインタを返します。 この関数は、戻り値の型が strstreambuf* であることを除き、 基底クラス版と同じ働きをします。

char* ptr = ss.str()
    対応する配列の開始点を指すポインタを返し、 ストリームをフリーズ ( strstreambuf(3C++) 参照) します。 配列が動的に割り当てられている場合は、 配列はその時点で自動的に削除されたり、NULL で終了するのではなく、 拡張できなくなります ( strstreambuf の freeze() を参照)。 str() が呼び出されるまでは、動的に割り当てられている配列は 対応するストリーム・バッファが破棄されると自動的に解放されます。 呼び出し以後、配列とそれをいつ解放するかはユーザーが制御しなければなりません。

関連項目

ios.intro(3C++)、 ios(3C++)、 istream(3C++)、 ostream(3C++)、 sbufpub(3C++)、 ssbuf(3C++)

『C++ ライブラリ・リファレンス』

2 章「iostream ライブラリ」