Heruntergeladenen String analysieren
-
Hey,
wenn ich diesen Code ausführen möchte(ich denke jeder versteht was er bewirken soll):count = recv( sock, buffer, sizeof(buffer), 0); //empfange String int.char* printf(buffer); std::strcpy(params, buffer); sscanf(params, "%d.%s", mode, param);sagt der Debugger mir: Zugriffsverletzung beim Schreiben an Position 0x00000000.
Hat jemand eine Idee, wie ich das regeln kann?Thx im Voraus
BCX
-
BlackCubeX schrieb:
Hat jemand eine Idee, wie ich das regeln kann?
Lern programmieren. Was soll man bitte bei deinen nicht vorhandenen Angaben machen?
-
Deine Zeiger sollten auf gültigen Speicher zeigen. 0 ist selten gültig.
Antwort nicht genau genug? Das liegt an der Frage.
P.S.: Und in C++ darfst du auch ruhig so etwas wie vector<char> benutzen, da sparst du dir eine Menge Probleme.
-
Ok, dann beschreib ich mal genau was das Ziel ist:
Das Programm empfängt übers Netzwerk einen String char* buffer, der so aufgebaut ist: Zahl von 1-9"."ein String, in dem auch Whitespaces etc. vorkommen können.
Bis hierhin klappt noch alles. Nun möchte ich die Zahl vor dem Punkt in einen int mode und alles nach dem Punkt in char* param schreiben.
-
BlackCubeX schrieb:
Ok, dann beschreib ich mal genau was das Ziel ist:
Das Programm empfängt übers Netzwerk einen String char* buffer, der so aufgebaut ist: Zahl von 1-9"."ein String, in dem auch Whitespaces etc. vorkommen können.
Bis hierhin klappt noch alles. Nun möchte ich die Zahl vor dem Punkt in einen int mode und alles nach dem Punkt in char* param schreiben.Für sowas benutzt man nicht C-Funktionen. Sicher, dass du nicht ins C-Forum willst? Sonst: Stringstreams, nimm lieber auch Standard-C++ I/O-Streams (zum Ausgeben).
-
Hacker schrieb:
BlackCubeX schrieb:
Ok, dann beschreib ich mal genau was das Ziel ist:
Das Programm empfängt übers Netzwerk einen String char* buffer, der so aufgebaut ist: Zahl von 1-9"."ein String, in dem auch Whitespaces etc. vorkommen können.
Bis hierhin klappt noch alles. Nun möchte ich die Zahl vor dem Punkt in einen int mode und alles nach dem Punkt in char* param schreiben.Für sowas benutzt man nicht C-Funktionen. Sicher, dass du nicht ins C-Forum willst? Sonst: Stringstreams, nimm lieber auch Standard-C++ I/O-Streams (zum Ausgeben).
Ich gebe zu, ich benutze öfter C-Funktionen, da ich für die iwie ein besseres Gefühl hab.
Aber da C++ mir kein Fremdwort ist, hab ich gedacht, ich frag mal hier nach.
-
scanf bzw. in deinem Fall sscanf musst du einen Pointer übergeben, sonst kann es ja nicht auf deine Variable schreiben. param (char*) ist einer, aber mode ist deinem Text nach ein int also musst du &mode schreiben. Ob das mit dem Formatstring so funktioniert kann ich dir aber nicht sagen.
-
Ich weiß, dass mich hier gleich jeder hassen wird, aber das nehme ich in Kauf

count = recv( sock, buffer, sizeof(buffer)-1, 0); //empfange String int.char* buffer[sizeof(buffer)-1]=0; int mode; char c; char *str = buffer; while(c=*(str++)) if(c=='.')*str=0; mode=atoi(buffer); ++str; // Zahl in mode // string in str // ungetestet