0

以下は、私が実行しているコードと対応する出力です。

    #include<iostream>
    #include <sstream>
    #include <strstream>
    #include <streambuf>

    template <typename char_type>
struct ostreambuf : public std::basic_streambuf<char_type,std::char_traits<char_type> >
{
 ostreambuf(char_type* buffer, std::streamsize bufferLength)
{
    // set the "put" pointer the start of the buffer and record it's length.
    setp(buffer, buffer + bufferLength);
}
};


int main()            
{
 char strArr[]    = "Before-1";
 char stringArr[] = "Before-2";

 std::strstream strStream(strArr,sizeof(strArr));

 ostreambuf<char> ostreamBuffer(stringArr, sizeof(stringArr));
 std::ostream stringStream(&ostreamBuffer);

  const std::streampos posStringBefore = stringStream.tellp();

   std::cout << "Before: "
                                    << "strArr = " 
                                    << strArr 
                                    << " & "
                                    << "stringArr = "
                                    << stringArr
                                    << std::endl;

            std::cout << "Before: " << "posStringBefore = "
                                    << posStringBefore
                                    << std::endl;

            // -------------------------
            strStream << "After-1";
            stringStream << "After-2";
            const std::streampos posStringAfter = stringStream.tellp(); 

            std::cout << "After : "
                                    << "strArr = " 
                                    << strArr 
                                    << " & "
                                    << "stringArr = "
                                    << stringArr
                                    << std::endl;

            std::cout << "After : " << "posStringAfter = "
                                    << posStringAfter
                                    << std::endl;



            return 0;
}

これはVS2010のo / pです:

 Before: strArr = Before-1 & stringArr = Before-2
 Before: posStringBefore = -1
 After : strArr = After-11 & stringArr = After-22
 After : posStringAfter = -1

リンクを参照し て、標準ストリーム(pubsetbuf)で使用される内部バッファを設定する

作成された std::ostream オブジェクトのサイズを取得するには?

4

1 に答える 1

0

「間違った」出力/値は得られません。へのコールを中継する をtellp使用します。実装は、C++ 標準で定義されているとおりに単純に戻ります。クラスでこのメソッドの独自の実装を提供する必要があります。rdbuf()->pubseekoffvirtual seekoffbasic_streambuf-1ostreambuf

cppreferenceを参照してください:basic_streambuf::pubseekof

于 2013-04-02T12:22:24.483 に答える