読者です 読者をやめる 読者になる 読者になる

メモリ上のストリームクラスを使用する

ファイルに対して読み書きする場合は、fstream を使用しますが、

#include <fstream>

int main (int argc, char** argv) {
  std::fstream fs ("test.txt", std::ios::in | std::ios::out);
  char bin[255] = {0};
  fs.read (bin, 255);
}


メモリに対して読み書きしたい場合は、stringstream を使用します。
文字列以外にも使用でき、改行コードが書き換わることもありません。

strstream というクラスもありますが、こちらは、クラスの設計自体がおかしく、
他のstdクラスと同じように使用するとメモリリークの原因となるので、絶対に使用してはいけません。

#include <sstream>

int main (int argc, char** argv) {
  std::stringstream ss;

  // 書き込み
  char put[] = "aiu";
  ss.write (put, 3);

  // 書き込みシーク
  ss.seekp (2, ios::beg);

  // 読み込みシーク
  ss.seekg (0, ios::beg);

  // 読み込み
  char out[255] = {0};
  ss.read (out, 255);

  // メモリサイズを取得したい場合は、tellpやtellg を利用できる
}