Leider this war nicht hilfreich ...istringstream Operator >> Rückgabewert
Ich habe eine Software, die eine Ausnahme als implementiert wirft, aber ich muss wissen, wie es zu vermeiden. Hier ist der spezifische Teil:
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
Und das ist die ganze Methode.
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;
Die Methode analysiert den Dateninhalt einer TCP-Nachrichtenantwort. Jede Nachricht wird mit einem ">" Zeichen bestätigt.
Das Problem ist jetzt, dass manchmal (vor allem, wenn ein viele Nachrichten in der Schleife) sind der Gehalt an iss
ist:
"> 250 Alright"
Das richtige Format würde sein
"250 Alright"
- Warum gibt
(iss >> c)
false
zurück, wenn der erste Inhalt voniss
ein ">" ist? - Ist es möglich, dass der Absender ein zweites ">" in seiner Antwort zurückgegeben hat?
Vielen Dank im Voraus
Dank @Curious, so dass die Operator >> ist empfindlich auf den 'Ziel' Typ ... schön –