Warum ist strtok verändert seine Eingaben wie folgt?
Ok, so verstehe ich, dass strtok verändert den Eingabe-argument, aber in diesem Fall, er stürzt hinunter, den input-string in nur das erste token. Warum ist das passiert und was kann ich tun, um es zu beheben? (Bitte beachten, ich Rede nicht über die variable "temp", die sollte das erste token, sondern die variable "input", die nach einem Aufruf von strtok wird "dies")
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
char input[]="this is a test of the tokenizor seven";
char * temp;
temp=strtok(input," ");
printf("input: %s\n", input); //input is now just "this"
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
strtok()
findet ein token, es ändert sich der Charakter sofort nach der token in einem\0
, und gibt dann einen Zeiger auf das token. Das nächste mal, wenn Sie rufen Sie es mit einemNULL
argument, es beginnt die Suche nach der Separatoren, die zur Beendigung des ersten token, D. H., nach der\0
und möglicherweise weiter entlang.Nun, der ursprüngliche Zeiger auf den Anfang der Zeichenkette noch Punkte, um den Anfang der Zeichenkette, aber das erste token ist jetzt
\0
-terminiert, D. H.,printf()
denkt, das Ende der token ist das Ende der Zeichenfolge. Der rest der Daten ist immer noch da, aber das\0
hältprintf()
aus, es zu zeigen. Wenn Sie einfor
-Schleife zu gehen über die ursprünglichen Eingabe-Zeichenfolge bis zu der ursprünglichen Anzahl der Zeichen, die Sie finden würde, die Daten sind alle noch da.Sollten Sie Ausdruck der token, die Sie erhalten von
strtok
und sich keine sorgen über die Eingabe-array, da Null-Werte eingefügt werden, indemstrtok
. Sie müssen wiederholt aufruft, um alle Spielfiguren:Weil strtok fügt Nullen in jeder separator, das ist, warum Sie verwenden, wiederholte Aufrufe von strtok man jeden token. Der Eingabe-string nicht verwendet werden, wenn Sie beginnen mit strtok. Sie nicht "fixieren" -- das ist, wie es funktioniert.