5

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

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

"帧率ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýý««««««««Íþîþ"

代码 :

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

然后,当我尝试获取关联的字符串时,我的代码就会崩溃……我找不到任何解释,我的代码也没有问题……

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

4

2 回答 2

6

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

于 2013-03-09T05:58:24.833 回答
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);修复了我的输出,但非常不愉快。

于 2017-11-01T19:52:16.177 回答