所以,我正在尝试在我的程序中使用stringstream,以获得一些格式化的字符串(特别是因为我需要将数字转换为字符串)。
问题是,我的程序崩溃,当我用Visual Studio调试它时,在我的间谍窗口中,我看到我的stringstream的字符串缓冲区产生(当试图向其添加“Framerate”时):
“FramerateÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþ”
代码:
std::stringstream s;
s << "Framerate";
当我尝试获取相关字符串时,我的代码会崩溃... 我找不到任何解释,我的代码也没问题......
编辑:结果显示这些字符不是问题,并且字符串流返回带有str()
的预期字符串。
答案 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);
,但非常不愉快。