c ++ stringstream无效的字符串指针

时间:2014-04-18 08:29:25

标签: c++ string stringstream

我有stringstream,在迭代中推送它。将其内容转换为int对象后,它永远不会更改。我认为它发生了变化,但是instance.str()指向一个无效的地方,其中字符串不再存在。

bool h = 1;
stringstream ss;
for(int i = 0; i < input.length(); i++)
{
    if(input[i] != ':')
    {
        cout << "input:  " << input[i] << endl;
        ss << input[i];
        cout << "ss:  " << ss.str() << endl;
    }
    else
        if(h)
        {
            ss >> hour;
            ss.str(string());
            h = 0;
        }   
}

在此循环中,在满足条件(htrue)之后,流的内容将转换为int。直到这一刻一切正常,但在此之后,ss.str()会返回一个空的string

是我对无效字符串指针的猜测吗?如果是的话,原因是什么?如果不是,这种行为的原因是什么?

更新 我更改了源代码,因为之前的版本是我通过这个技巧处理问题的方式:

stringstream a(ss.str());
a >> hour;
ss.str(string());

1 个答案:

答案 0 :(得分:2)

问题是这一行:

ss >> hour;

设置流的eof位,因为您到达了字符串的末尾。当设置eof位时,流不再起作用。所以你必须在设置空字符串后清除它:

ss.str(string())
ss.clear()