为什么stringstream会产生奇怪的值?

时间:2013-03-09 05:53:24

标签: c++ stringstream

所以,我正在尝试在我的程序中使用stringstream,以获得一些格式化的字符串(特别是因为我需要将数字转换为字符串)。

问题是,我的程序崩溃,当我用Visual Studio调试它时,在我的间谍窗口中,我看到我的stringstream的字符串缓冲区产生(当试图向其添加“Framerate”时):

“FramerateÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ”

代码:

std::stringstream s;
s << "Framerate";

当我尝试获取相关字符串时,我的代码会崩溃... 我找不到任何解释,我的代码也没问题......

编辑:结果显示这些字符不是问题,并且字符串流返回带有str()的预期字符串。

2 个答案:

答案 0 :(得分:5)

stringstream的内部缓冲区不需要以null结尾。但是,当您在str()对象上调用stringstream时,您将获得一个以空字符结尾的字符串。你的崩溃的原因很可能在其他地方。

答案 1 :(得分:1)

在visual studio 2015版本14.0.25431.01 Update 3中,看起来std :: strstream不能确保'str()'返回的数据为空终止。

我用以下方式进行了测试:

`std::strstream s;
 s << "the cow jumped over the moon!";
 return s.str();`

得到了:     the cow jumped over the moon!===zzzz

在返回修复我的输出之前添加s.write("", 1);,但非常不愉快。