Why is stringstreams rdbuf() and str() giving me different output?

11,059
ss.rdbuf()->str();

Returns copy of all buffer content.

What doing std::cout << ss.rdbuf();?

See description for

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);

It read character by character from buffer and write them to ostream, until eof/fail on writing/exception occurs.

You already have read one word from buff. Now it read rest part.

Share:
11,059

Related videos on Youtube

mslot
Author by

mslot

.NET developer.

Updated on April 19, 2022

Comments

  • mslot
    mslot about 2 years

    I have this code,

    int main()
    {
        std::string st;
        std::stringstream ss;
        ss<<"hej hej med dig"<<std::endl;
    
        std::getline(ss,st,' ');
        std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
        std::cout <<"ss.rdbuf() : " << ss.rdbuf();
        return 0;
    }
    

    Giving me this output

    ss.rdbuf()->str() : hej hej med dig

    ss.rdbuf() : hej med dig

    But why is that? Is that because of ostreams definition of operator<str() gives me different output. In my eyes the output should be the same even if I have used getline.

  • mslot
    mslot about 15 years
    Oh. The fact that I have'nt looked it up in one of me expensive C++ books is that Im on a vacation, so I only have google and I couldnt find a site explaining the operator<< behaviour in a way that I understood. I actually thought that getline removed tokens with the delim from the stream.
  • bayda
    bayda about 15 years
    I didn't use one of expensive C++ books. I just undertsood that this behavior is not rbuf() specified and start looked in standard for this overloading operator<<.
  • bayda
    bayda about 15 years
    Remove characters from reading string buffer is slow operation - and obviously don't used. Thank you for interest task:)
  • mslot
    mslot about 15 years
    bb, looking in the standard :) I have such standard at home. I'm on a vacation and dont got it with me. I have read the declarations for the iostream operators, but that didnt tell me how it worked. I guess I was lost in google. But thanks for the link!!