Ich serialisiere eine C-Struktur in einen String und deserialisiere sie dann mit strtok()
. Aber leider erkennt strtok()
keine leeren Felder (z.B. 1:2::4).
Gibt es eine alternative Funktion?
Ich serialisiere eine C-Struktur in einen String und deserialisiere sie dann mit strtok()
. Aber leider erkennt strtok()
keine leeren Felder (z.B. 1:2::4).
Gibt es eine alternative Funktion?
Sie können strchr
(für nur ein Begrenzungszeichen) oder strcspn
(für eine Gruppe möglicher Begrenzungszeichen) verwenden, um das nächste Begrenzungszeichen zu finden, das Token zu verarbeiten und dann einfach einen Schritt nach vorne zu gehen. Machen Sie dies in einer Schleife und Sie haben, was Sie brauchen.
Drakosha hat die richtige Antwort gegeben. Ich möchte ein Beispiel für beide Varianten hinzufügen.
Mit strtok:
char *token;
char *tmp_string;
char delimiter[10] = " |,.:";
strcpy (tmp_string, "1:2::4");
token = strtok(tmp_string, delimiter); // erster Token
while(token != NULL) {
i++;
printf ("i=%d\tToken: len(%d)\t%s", i, strlen(token), token);
// etwas machen
token = strtok(NULL, delimiter); /* nächster Token */
}
Mit strsep (erkennt ""):
char *token;
char *tmp_string;
char delimiter[10] = " |,.";
strcpy (tmp_string, "1:2::4");
token = strsep(&tmp_string, delimiter); // erster Token
while(token != NULL) {
i++;
printf ("i=%d\tToken: len(%d)\t%s", i, strlen(token), token);
// etwas machen
token = strsep(&tmp_string, delimiter); /* nächster Token */
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.