Split-C-string in-Token mit sscanf
Ich versuche, split einen string in tokens auf, sondern eher rekursiv. Ich bin versucht, zu analysieren:
"content=0&website=Google"
so, ich habe einen Weg, um die Parameter und Werte. Wenn ich versuche strtok
ich am Ende zerstören Sie die Zeichenfolge ich möchte analysieren zweimal. Also versuchte ich
char *contents = "content=0&website=Google"
char arg[100];
char value[100];
sscanf(contents, "%s&%s", arg, value);
als der erste Durchgang, in der Hoffnung, zu analysieren arg
wieder, aber es schlägt fehl, und arg
enthält die gesamte Zeichenfolge. Ich habe versucht, mit "%s\&%s"
denken &
war ein reserviertes Wort, aber kein Glück gibt.
Hilfe!
Edit:
Dies war meine strtok hack:
static void readParams(char * string, char * param, char * value) {
printf("This is the string %s\n",string);
char * splitted = strtok (string,"=");
while (splitted != NULL)
{
printf("This is the string %s\n",splitted);
splitted = strtok (NULL, "=");
//Then do some saving to param and value
}
}
char * splitted = strtok (contents,"&");
int counter = 0;
while (splitted != NULL)
{
char * t_str = strdup(splitted);
readParams(t_str, param, value);
splitted = strtok (NULL, "&");
}
aber es funktioniert nicht, da zerlegt ' s strtok
am Ende wird gobbldygook.
So speichern Sie eine Kopie des Strings, bevor Sie anrufen
Sie können versuchen
Benutzer ich meine Wahrnehmung dies ist eine sehr schöne Frage. Neben der Vorhersage von anderen Methoden, es wird besser sein, wenn jemand den Grund dafür, warum das sscanf(Inhalt, "%s&%s", arg, Wert); funktioniert nicht
wie ich schon sagte in meiner Antwort, Fragen
strtok()
.Sie können versuchen
strchr()
.Benutzer ich meine Wahrnehmung dies ist eine sehr schöne Frage. Neben der Vorhersage von anderen Methoden, es wird besser sein, wenn jemand den Grund dafür, warum das sscanf(Inhalt, "%s&%s", arg, Wert); funktioniert nicht
wie ich schon sagte in meiner Antwort, Fragen
scanf
zu Scannen %s
Ursachen es, der scan bis zum nächsten whitespace-Zeichen. Also es wird nicht aufhören, auf ein kaufmännisches und-Zeichen.InformationsquelleAutor Rio | 2012-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine Lösung, die zu funktionieren scheint:
InformationsquelleAutor Donotalo
scanf
ist primitiver, als Sie scheinen zu denken —%s
übereinstimmen wird alles bis zum nächsten Leerzeichen. Ihre beste Lösung ist wahrscheinlich stick mitstrtok
aber werfen Sie nur Inhalte, die Sie habenstrdup
ed von der autorisierenden original.InformationsquelleAutor Tommy
Ich empfehlen, etwas ähnlich dem folgenden:
InformationsquelleAutor RootsAmongRuins