substr problem
-
liebe community,
ich sende via socket eine http anfrage und bekomme eine antwort. nun will ich einen bestimmten teil dieser antwort auslesen. dazu habe ich mir folgenden code geschrieben:
string cut_http (string text) { size_t pos; pos = text.find("ebene\">"); string s = text.substr(pos+8, pos+12); cout << s << endl; }- Suche in der HTTP Antwort nach ebene">
- Gehe 8 chars von dem "Fundort" weiter.
- Weise dem string s den Bereich vom string text von pos+8 bis pos+12 zu.
- Gebe den String s aus.
Nun würde ich mir erwarten, dass auf dem Bildschirn "test1" zu sehen ist, was ich jedoch zu sehen bekomme, ist beinnahe die komplette http antwort:
local@osiriys:~/Desktop/coding/http$ ./main test1<br>test2<br>test3<br>asdf<br>asdf<br>test<br>asdf<br>ert<br>sdag<br></div> <br> <form method="POST" action="index.php"> <input type="text" size=60 name="cmd"> <input type="submit" name="submit" value="execute"> </form> </div> </body> </html>Irgendwer ne Idee?
Danke!
-
Weiß nicht, ob ich das hunderprozentig verstanden habe, aber ich habe substr so in Erinnerung, dass man die Länge des zu extrahierenden Strings angibt, nicht die Endposition.
Außerdem solltest Du die Startposition nicht hardcoden sondern vom Suchstring abhängig machen.
Dh. sowas in der Art:
string cut_http(const string& s) { const string searchString = "ebene\">"; const size_t numOfCharsToGet = 4; const size_t pos = s.find(searchString); return s.substr(pos+searchString.length(), numOfCharsToGet); }Ich verschiebe mal nach C++, damit die diesbezüglich kompetenteren Kollegen das fachkundig zerpflücken können. :xmas2:
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke für die Antwort.
Natürlich stimmt deine Antwort, war gestern wohl noch ein bisschen zu betrunken.
Tut mir leid für die dumme Frage.LG
-
der eigentliche fehler lag aber wo anders:
string cut_http (string text) { const std::size_type pos = text.find("ebene\">"); //ich finds so übersichtlicher... // so was in der art fehlt: //if (pos == std::string::npos) return ""; string s = text.substr(pos+8, 4); //hier aber das hatten wir jz schon ^^ cout << s << endl; return s; }jz musst du hier nur noch (wie nman das schon vorgemacht hat) die festen Werte in irgendwelche Variablen packen damit du das auch iwann mal ändern kannst ^^
da std::string::npos ja ~0 (-1) ist, wird beim rechnen +4 natürlich alles ab dem 3. Zeichen genommen - falls iwann also mal die zu suchende zeichenkette nicht dabei ist, wird alles kaputt gehen ^^
bb