C-Bibliotheksfunktionen -strtok()
C-Standardbibliothek - <string.h>
strtok() ist eine Zeichenkettenverarbeitungsfunktion in der C-Standardbibliothek, mit der eine Zeichenkette in eine Reihe von Teilzeichenketten (d. h. "Tokens") aufgeteilt wird.
C-Bibliotheksfunktionenchar *strtok(char *str, const char *delim)Zeichenkette aufteilenstrFür eine Reihe von Zeichenketten,delimals Trennzeichen.
Deklaration
Im Folgenden finden Sie die Deklaration der Funktion strtok().
char *strtok(char *str, const char *delim)
Parameter
str: Die aufzuteilende Zeichenkette. Beim ersten Aufruf übergeben Sie die aufzuteilende Zeichenkette; bei nachfolgenden Aufrufen übergeben Sie
NULL, was anzeigt, dass dieselbe Zeichenkette weiter aufgeteilt werden soll.delim: Die Trennzeichenkette.
strtok()teilt anhand jedes beliebigen Zeichens in dieser Zeichenkette auf.str。
Rückgabewert
Gibt einen Zeiger auf das nächste Token zurück. Wenn keine weiteren Token vorhanden sind, wird NULL zurückgegeben.
Beispiel
Das folgende Beispiel demonstriert die Verwendung der Funktion strtok().
Beispiel
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:
This is www.example.com website
Hinweise
Die ursprüngliche Zeichenkette ändern:
strtok()ändert die übergebene Zeichenkette und ersetzt die Trennzeichen durch\0(Nullzeichen). Daher wird die ursprüngliche Zeichenkette zerstört.Nicht reentrant:
strtok()Es verwendet einen statischen Puffer zum Speichern des Zustands, daher ist es nicht threadsicher. Bei Verwendung in einer Multithread-Umgebung sollten Sie die Verwendung einerstrtok_r()(reentranten Version) in Betracht ziehen.Aufeinanderfolgende Trennzeichen: Wenn aufeinanderfolgende Trennzeichen in der Zeichenkette vorhanden sind,
strtok()ignoriert sie und gibt das nächste gültige Token zurück.
Reentrante Version: strtok_r()
strtok_r() ist eine reentrante Version von strtok(), mit der Sie sie sicher in Multithread-Umgebungen verwenden können. Der Prototyp lautet wie folgt:
char *strtok_r(char *str, const char *delim, char **saveptr);
saveptr: ist ein Zeiger auf char*, der zum Speichern des Aufteilungszustands verwendet wird.
Beispiel
#include <string.h>
int main() {
char str[] = "Dies ist eine Beispielzeichenkette";
char *token;
char *saveptr;
// Erster Aufruf von strtok_r, wobei die zu zerlegende Zeichenkette übergeben wird
token = strtok_r(str, " ", &saveptr);
// strtok_r weiter aufrufen, bis NULL zurückgegeben wird
while (token != NULL) {
printf("%s\n", token);
token = strtok_r(NULL, " ", &saveptr);
}
return 0;
strtok() ist eine praktische Funktion zum Aufteilen von Zeichenketten, aber man muss sich ihrer Nebenwirkungen (Verändern der ursprünglichen Zeichenkette) und Nicht-Reentranz bewusst sein. In Multithread-Umgebungen wird empfohlen, strtok_r() zu verwenden, um Race Conditions zu vermeiden.
Weitere Erweiterungen