开发者

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 = "开发者_如何学Pythonsomeval";
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?


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜