3

ostringstreama のコンテンツを他のストリーム (たとえば)に出力したいstd::cout。使用できることはわかっていますstd::ostringstream::str()が、ストリームの内容を文字列にコピーしてから、さらに他のストリームにコピーする際にオーバーヘッドがあると思います。使用できることがわかりましたstd::ostringstream::rdbuf()25票を示唆するコメント)。std::coutしかし、以下のテスト プログラムの出力に示されているように壊れます。私は何か間違ったことをしていますか?

#include <iostream>
#include <sstream>

int main(int argc, char const *argv[])
{
    std::ostringstream ss;
    ss << "some data" << std::endl;
    std::cerr << std::cout << std::endl;
    std::cout << "start" << std::endl;
    std::cout << ss.str();
    std::cout << ss.rdbuf();
    std::cout << "end" << std::endl;
    std::cerr << std::cout  << std::endl;
    return 0;
}

結果:

0x6013b8
start
some data
0
4

1 に答える 1

2

あなたの問題は、名前から予想されるようにrdbuf()、 an のバッファーが書き込み専用であることです(メソッドを介して文字列を返します)。バッファポインタを介してデータを読み戻すことはできません。ostringstreamostringstreamstr()

に変更するostringstreamstringstream、正常に動作するはずです。

于 2013-05-21T19:36:22.757 に答える