Malheureusement this n'a pas été utile ...opérateur istringstream >> valeur de retour
J'ai un logiciel qui lance une exception mis en œuvre, mais je dois savoir comment éviter. Voici la partie spécifique:
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
Et c'est toute la méthode.
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;
La méthode analyse le contenu de données d'une réponse de message tcp. Chaque message est reconnu avec un caractère ">".
La question est maintenant, que parfois (surtout quand un bon nombre de messages sont dans la boucle) le contenu de iss
est:
"> 250 Alright"
Le format correct serait être
"250 Alright"
- Pourquoi
(iss >> c)
renvoie lorsque le premier contenu deiss
est un ">"? - Est-il possible que l'expéditeur ait renvoyé un deuxième ">" dans sa réponse?
Merci à l'avance
Merci @Curious, de sorte que le operator >> est sensible au type 'target' ... sympa –