stringstream->rdbuf()->pubsetbuf is not setting the buffer

c++, stl, stringbuffer, stringstream

Solution

Not should set contents. `pubsetbuf` calls `virtual setbuf`

basic_streambuf<charT,traits>* setbuf(charT* s, streamsize n);

15 Effects: implementation-defined, except that setbuf(0,0) has no effect.

16 Returns: this.

VS 2010. There is no overload of virtual method `setbuf` in `basic_stringbuf`, it uses default from `basic_streambuf`

virtual _Myt *__CLR_OR_THIS_CALL setbuf(_Elem *, streamsize)
    {   // offer buffer to external agent (do nothing)
    return (this);
    }

Problem

I am trying to modify a stringbuffer of a stringstream object without having to copy a string, using the method pubsetbuf, but it is not working. I am following the documentation in http://www.cplusplus.com/reference/iostream/streambuf/pubsetbuf/. Here is my example code: ``` #include <iostream> #include <sstream> int main(int argc, char* argv[]) { std::stringstream stream("You say goodbye"); char replace[] = {"And I say hello"}; std::cout << stream.str() << std::endl; // Checking original contents stream.rdbuf()->pubsetbuf(replace, 16); // Should set contents here std::cout << stream.str() << std::endl; // But don't :( return 0; } ``` And the output is: ``` You say goodbye You say goodbye ``` I know I can use stream.str(replace), but this method copies the value of 'replace', and I don't want to make a copy. What am I missing? Update: I'm using VS2010

Original source

Related problems