3

ファイルの内容をバッファにコピーしようとしています。

std::ifstream fp(myFile, std::ios::binary)
fp.seekg(0, fp.end); // set cursor at the end
int length = fp.tellg(); // get data size
fp.seekg(0, fp.beg); // go back to buffer begin

char data[1000];
if(length<1000) {
    memcpy(data, fp.rdbuf(), length); // This crash

    std::stringstream contents;
    contents << fp.rdbuf();
    memcpy(data, contents->str().c_str(), length); // works fine
}

rdbuf を直接使用してコピーするとクラッシュしますが、stringstream でコピーしてからバッファでコピーすると問題なく動作します。

誰か説明がありますか?

4

2 に答える 2

4

これは、rdbuf関数が実際にデータを返すのではなく、ストリーム バッファー インスタンスを返すためです。入力演算子<<は、このオブジェクト インスタンスを処理するためにオーバーロードされてmemcpyいますが、それをどうするかはわかりません。

于 2013-11-08T09:52:17.030 に答える
2

rdbuf()memcpy を使用できるバッファを返すのではなく、streambufオブジェクトを返します。

于 2013-11-08T09:52:28.140 に答える