我有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()
会返回一个空的string
。
是我对无效字符串指针的猜测吗?如果是的话,原因是什么?如果不是,这种行为的原因是什么?
更新 我更改了源代码,因为之前的版本是我通过这个技巧处理问题的方式:
stringstream a(ss.str());
a >> hour;
ss.str(string());
答案 0 :(得分:2)
问题是这一行:
ss >> hour;
设置流的eof位,因为您到达了字符串的末尾。当设置eof位时,流不再起作用。所以你必须在设置空字符串后清除它:
ss.str(string())
ss.clear()