我们看到了一个奇怪的场景,基本上可以归结为以下内容:
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();
我知道这听起来很疯狂(或者对我来说确实如此),而且我还没有能够在更大的系统中复制它-所以很抱歉没有"工作"的例子。但有人知道这种事情是怎么发生的吗?我们是否可以在某个地方踩到内存,或者在某个位置对字符串表做一些事情,或者其他类似的事情?
如果字符串中包含空字符,则不同,' '
。
.c_str()版本将计算到null的长度,而std::string输出将知道其长度并输出其所有字符。