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.
Related videos on Youtube
Comments
-
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 about 15 yearsOh. 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 about 15 yearsI 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 about 15 yearsRemove characters from reading string buffer is slow operation - and obviously don't used. Thank you for interest task:)
-
mslot about 15 yearsbb, 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!!