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

Why does stringstream yields strange values?

本文关键字:stringstream 为什么      更新时间:2023-10-16

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

问题是,我的程序崩溃了,当我用Visual Studio调试它时,在我的Spy窗口中,我看到我的stringstream的字符串缓冲区产生(当试图添加"帧率"时):

" FramerateIIIIIIIIIIIIIIIIIIIIIIIyyyy««««««««我þþ"

代码:

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

我的代码将崩溃的时刻,我试图获得相关的字符串…我找不到任何解释,也不是我的代码有问题…

编辑:原来这些字符不是问题,并且stringstream返回str()的预期字符串。

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

在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);修复了我的输出,但非常不愉快。