# マニュアルページ strstream.3

## 名前

         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 ライブラリ」