2

もう一度聞いてみますが、前回よりはましです。

さまざまな場所からバイナリデータを読み込み、作成したクラスで操作するプログラムがあります。データは元々そのソース(異なる場合があります)から読み取られ、次にストリームに書き込まれ、そのストリームはクラスが作業するためにクラスに渡されます。

私の苦労は、を作成し、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は、より良いオプションを教えてください。

4

1 に答える 1

6

stringstreamまさにあなたが望むものです。C ++文字列には、ヌル文字()を埋め込むことができ\0ます。あなたが私を信じていないなら、それを試してみてください

iostreamは実際には抽象的な基本クラスであり、それ自体には実際の機能はありません。iostreamのインスタンスを直接作成しないでください。

于 2013-01-03T16:12:20.720 に答える