如何清除流字符串的缓冲区

How to clear the buffer of a streamstring?

本文关键字:字符串 缓冲区 清除 何清除      更新时间:2023-10-16

我在两个循环中有一个streamstring,它正在烧录我的RAM。那么,如何正确地清除蒸汽串的缓冲区呢?简化如下:

stringstream ss (stringstream::in | stringstream::out);
for()
{
    for()
    {
        val = 2;
        ss << 2;
        mystring = ss.str();
        // my stuff
    }
    // Clear the buffer here
}

它写了2,然后是22,然后是222……我试过.clear()或.flush(),但不是这样。那么我是怎么做到的呢?

显而易见的解决方案是每次使用一个新的stringstream,例如:

for (...) {
    std::stringstream ss;
    for (...) {
        //  ...
    }
}

这就是stringstream的设计使用方式。(还有:你真的想要stringstream,还是只想要ostringstream?)

当您想要清除多余的字符时设置ss.str("");(编辑:谢谢)。

如果流在之前的转换过程中设置了任何错误标志,请使用.clear()

如果使用C++0x:

ss.swap(stringstream());

Visual Studio 2010(SP1)支持它。

如果您不使用C++0x:

ss.seekp(0);
ss.seekg(0);
ss.str("");
ss.clear();

它不会清除内存,但您可以使用stringstream对象,因为它以前是空的。