C++ stringstream使字符串指针无效

标签 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() 返回一个空的字符串

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

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

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

最佳答案

问题在于这一行:

ss >> hour;

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

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

关于C++ stringstream使字符串指针无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23150368/

相关文章:

java - 将一个字符串数组与多个字符串数组进行比较的算法

C++如何检查Shell输入的数量?

c++ - emit 和 emit() 的区别

php - 为什么 '\n' === '\\n' 在 php 中是真的?

c++ - tellp()计算stringstream长度的原理是什么?

c++ - 读取具有任意数量空格的输入字符串的一部分

c++ - C++中的字符串流来解析单词和数字的字符串

c++ - 计算最大子序列和的时间复杂度

c++ - abort() 的调用者在回溯中是未知的,任何调试它的建议

c - 如何在c中完美截断字符串?