我们看到一个奇怪的场景,基本上归结为以下几点:
std::string something = "someval";
std::stringstream s;
s << something;
std::cout << s.str();
不等于:
std::string something = "someval";
std::stringstream s;
s << something.c_str();
std::cout << s.str();
更进一步 - 在任何一种情况下输出都不是胡言乱语。发生的情况是案例1的输出似乎映射到系统中的另一个(有效)字符串,而案例2的输出是预期的。
我们只需更改以下内容即可看到此行为:
s << something;
要:
s << something.c_str();
我知道这听起来很疯狂(或者它对我有用),而且我无法将其复制出更大的系统 - 很抱歉没有“工作”的例子。但有谁知道这种事情会发生什么?我们可以在某个地方踩到内存,或者在某个地方或其他任何地方对某个字符串做某事吗?
答案 0 :(得分:4)
如果字符串包含空字符'\0'
,则不同。
.c_str()版本将计算长度为nul,而std :: string输出将知道其长度并输出其所有字符。