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 SieNULL, 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

#include <string.h> #include <stdio.h> int main () { char str[80] = "Dies ist - www.example.com - Website"; const char s[2] = "-"; char *token; /*Erste Teilzeichenkette abrufen*/ token = strtok(str, s); /*Weiter die restlichen Teilzeichenketten abrufen*/ while( token != NULL ) { printf( "%s\n", token ); token = strtok(NULL, s); } return(0); }

Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:

This is 
 www.example.com 
 website

Hinweise

  1. 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.

  2. 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.

  3. 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 <stdio.h>
#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.

C-Standardbibliothek - <string.h>

Weitere Erweiterungen