もう一度聞いてみますが、前回よりはましです。
さまざまな場所からバイナリデータを読み込み、作成したクラスで操作するプログラムがあります。データは元々そのソース(異なる場合があります)から読み取られ、次にストリームに書き込まれ、そのストリームはクラスが作業するためにクラスに渡されます。
私の苦労は、を作成し、iostream
そこから書き込み/読み取りを行う方法を理解することです。私はさまざまな場所を調べてcplusplus.comのリファレンスを読みましたが、を作成する方法の簡単な例を見つけることができませんiostream
。
私が読んだものに基づいて、これが私が試したものです:
#include <iostream>
using namespace std;
int main(){
streambuf* sb;
iostream s(sb);
s.put('h'); //segfault
}
iostream
率直に言って、なぜそのセグフォールトが発生するのか、またはそれを修正する方法がわからないので、最終的に次のようなものを実行できるオブジェクトを適切に作成する方法を誰かに教えてもらいます。
void printByN(iostream s, n){
while (s.peek() != eof()){ // I'm not sure this is correct. need help with that too
char buf [n];
s.read(&buf, n);
cout << buf << endl;
}
}
int main(){
//create iostream s;
char* buf = "hello there my friend";
s.write(buf, strlen(buf));
}
重要なのは、ストリームが空であることを認識し、その時点で特別な値を返す必要があるということです。stringstream
バイナリデータに、データを終了することを意図していないヌル文字が含まれている可能性があるため、を使用できません。
これを行うのが間違った方法である場合iostream
は、より良いオプションを教えてください。