istringstream 运算符>> return 值
istringstream operator>> return value
不幸的是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 Alright"
正确的格式应该是
"250 Alright"
- 为什么
(iss >> c)
return false
当 iss
的第一个内容是“>”时?
- 发件人是否可能 return 在他的回答中输入了第二个“>”?
提前致谢
Why does (iss >> c) return false when the first content of iss is a ">"?
当读入的字符是“>”时,iss >> c
returns 为 false,因为它需要一个整数并希望将值赋给变量 c
,当找不到这样的整数时,istream
会进入错误状态。
Is it possible that the sender returned a second ">" in his answer?
您在 "state"
中看到的可能只是您无法读入(由于上述原因)的输入流剩余值
不幸的是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 Alright"
正确的格式应该是
"250 Alright"
- 为什么
(iss >> c)
returnfalse
当iss
的第一个内容是“>”时? - 发件人是否可能 return 在他的回答中输入了第二个“>”?
提前致谢
Why does (iss >> c) return false when the first content of iss is a ">"?
当读入的字符是“>”时,iss >> c
returns 为 false,因为它需要一个整数并希望将值赋给变量 c
,当找不到这样的整数时,istream
会进入错误状态。
Is it possible that the sender returned a second ">" in his answer?
您在 "state"
中看到的可能只是您无法读入(由于上述原因)的输入流剩余值