我有一个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;
}
}
在此循环中,满足条件(h
为true
)后,流的内容将转换为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/