将 std::string 和 std::string::c_str() 放入字符串流中有什么区别?



我们看到了一个奇怪的场景,基本上可以归结为以下内容:

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输出将知道其长度并输出其所有字符。

相关内容

  • 没有找到相关文章

最新更新