John Humphreys
John Humphreys

Reputation: 39294

What's the difference between putting std::string and std::string::c_str() into a stringstream?

We're seeing a strange scenario that basically boils down to the following:

std::string something = "someval";
std::stringstream s;

s << something;
std::cout << s.str();

is not equal to:

std::string something = "someval";
std::stringstream s;

s << something.c_str();
std::cout << s.str();

Taking that a step farther - the output is not gibberish in either case. What is happening is the output from case 1 appears to be mapped to another (valid) string in the system whereas the output from case 2 is what is expected.

We see this behavior by simply changing:

s << something;

To:

s << something.c_str();

I know this sounds crazy (or it does to me), and I haven't been able to replicate it out of the larger system - so sorry for no "working" example. But does anyone know how this kind of thing can happen? Can we be stepping on memory somewhere or doing something to a stringtable in some location or anything else like that?

Upvotes: 0

Views: 628

Answers (1)

Bo Persson
Bo Persson

Reputation: 92271

It is different if the string contains nul characters, '\0'.

The .c_str() version will compute the length up to the nul, while the std::string output will know its length and output all its characters.

Upvotes: 4

Related Questions