不幸的是this没有帮助...
我有一个在实施时会引发异常的软件,但我需要知道如何避免这种情况。这是具体部分:
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
这就是整个方法。
void parseReply(std::ostream& os, std::istream& is, std::string &strReturn) {
std::string s;
int c;
while (std::getline(is, s)) {
strReturn += s;
strReturn += '\n';
std::istringstream iss(s);
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
if (CODE_OK == c
|| CODE_ERROR == c
|| CODE_BUSSY == c
|| CODE_UNKNOWN_CMD == c
) {
break;
}
}
if (CODE_OK != c
&& CODE_UNKNOWN_CMD != c
&& CODE_BUSSY != c
) {
throw std::runtime_error("error: " + s);
}
while (is >> s) {
flyelite::util::chop(s);
strReturn += s;
if (">" == s) {
return;
}
}
return;
该方法解析tcp消息答案的数据内容。每条消息都以“>”字符确认。
现在的问题是,有时(通常在循环中有许多消息时)
iss
的内容是:“> 250好吧”
正确的格式是
“ 250好吧”
当
(iss >> c)
的第一个内容是“>”时,为什么false
返回iss
?发件人是否有可能在回答中返回第二个“>”?
提前致谢
最佳答案
当iss的第一个内容是“>”时,为什么(iss >> c)返回false?
当读入的字符为“>”时,iss >> c
返回false,因为它期望一个整数,并且想要将值赋给变量c
,而找不到该整数时,则istream
进入错误状态。
发件人是否有可能在回答中返回第二个“>”?
您可能在“状态”中看到的(由于上述原因)您可能无法读取的输入流中的剩余值