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

c++ stringstream invalidated string pointer

本文关键字:字符串 指针 c++ 无效      更新时间:2023-10-16

我有一个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());

问题是这行:

ss >> hour;

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

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