strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

Sucht das nächste Token in einer Zeichenfolge unter Verwendung des aktuellen Gebietsschemas oder eines Gebietsschemas, das übergeben wird. Diese Versionen von strtok, _strtok_l, wcstok, _wcstok_l, _mbstok_mbstok_l verfügen über Sicherheitsverbesserungen, wie unter Sicherheitsfeatures in der CRT beschrieben.

Wichtig

_mbstok_s und _mbstok_s_l können nicht in Anwendungen verwendet werden, die in Windows-Runtime ausgeführt werden. Weitere Informationen finden Sie im Artikel CRT functions not supported in Universal Windows Platform apps (In Apps für die universelle Windows-Plattform nicht unterstützte CRT-Funktionen).

Syntax

char* strtok_s(
   char* str,
   const char* delimiters,
   char** context
);

char* _strtok_s_l(
   char* str,
   const char* delimiters,
   char** context,
   _locale_t locale
);

wchar_t* wcstok_s(
   wchar_t* str,
   const wchar_t* delimiters,
   wchar_t** context
);

wchar_t *_wcstok_s_l(
   wchar_t* str,
   const wchar_t* delimiters,
   wchar_t** context,
   _locale_t locale
);

unsigned char* _mbstok_s(
   unsigned char* str,
   const unsigned char* delimiters,
   char** context
);

unsigned char* _mbstok_s_l(
   unsigned char* str,
   const unsigned char* delimiters,
   char** context,
   _locale_t locale
);

Parameter

str
Eine Zeichenfolge, die das oder die zu suchden Token enthält.

delimiters
Der Satz der zu verwendenden Trennzeichen.

context
Wird verwendet, um Positionsinformationen zwischen Aufrufen der Funktion zu speichern.

locale
Das zu verwendende Gebietsschema.

Rückgabewert

Gibt einen Zeiger auf das nächste Token zurück, das in str gefunden wird. Gibt zurück NULL , wenn keine weiteren Token gefunden werden. Jeder Aufruf ändert sich str durch Ersetzen eines NULL-Zeichens für das erste Trennzeichen, das nach dem zurückgegebenen Token auftritt.

Fehlerbedingungen

str delimiters context Rückgabewert errno
NULL any Zeiger auf einen NULL-Zeiger NULL EINVAL
any NULL any NULL EINVAL
any any NULL NULL EINVAL

Wenn str ist NULL , aber context ein Zeiger auf einen gültigen Kontextzeiger ist, gibt es keinen Fehler.

Bemerkungen

Die strtok_s Funktionsfamilie sucht das nächste Token in str. Der Satz von Zeichen in delimiters gibt mögliche Trennzeichen des in str gefunden Tokens für den aktuellen Aufruf an. wcstok_s und _mbstok_s sind Breitzeichen- und Multibytezeichenversionen von strtok_s. Die Argumente und Rückgabewerte von wcstok_s und _wcstok_s_l sind Breitzeichenzeichenfolgen; die von _mbstok_s and _mbstok_s_l sind Multibyte-Zeichenfolgen. Anderenfalls verhalten sich diese Funktionen identisch.

Diese Funktion überprüft ihre Parameter. Wenn eine Fehlerbedingung auftritt, wie in der Tabelle Fehlerbedingungen, wird der Handler für ungültige Parameter aufgerufen, wie unter Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, stellen diese Funktionen errno auf EINVAL ein und geben NULL zurück.

Beim ersten Aufruf von strtok_s überspringt die Funktion vorangestellte Trennzeichen, gibt einen Zeiger auf das erste Token in str zurück und beendet das Token mit einem NULL-Zeichen. Vom restlichen str können weitere Token durch mehrere Aufrufe von strtok_s geholt werden. Jeder Aufruf von strtok_s ändert str, indem er ein NULL-Zeichen nach dem zurückgegebenen Token einfügt. Der context-Zeiger erfasst, aus welcher Zeichenfolge gelesen wird und an welcher Stelle in der Zeichenfolge das nächste Token gelesen werden soll. Um das nächste Token von str zu lesen, rufen Sie strtok_s mit einem NULL-Wert für das str-Argument auf, und übergeben Sie den gleichen context-Parameter. Das NULL str-Argument bewirkt, dass strtok_s im geänderten str nach dem nächsten Token sucht. Das delimiters-Argument kann zwischen zwei Aufrufen jeden beliebigen Wert annehmen, damit der Satz von Trennzeichen variieren kann.

Da der context -Parameter die in strtok und _strtok_lverwendeten statischen Puffer ersetzt, ist es möglich, zwei Zeichenfolgen gleichzeitig im gleichen Thread zu analysieren.

Der Ausgabewert wird durch die Einstellung der LC_CTYPE Kategorieeinstellung des Gebietsschemas beeinflusst. Weitere Informationen finden Sie unter setlocale.

Die Versionen dieser Funktionen ohne das _l Suffix verwenden das aktuelle Threadschema für dieses gebietsschemaabhängige Verhalten. Die Versionen mit dem _l Suffix sind identisch, verwenden jedoch stattdessen das vom locale -Parameter angegebene Gebietsschema. Weitere Informationen finden Sie unter Locale.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dies ändern, erfahren Sie unter Globaler Status in der CRT.

Anforderungen

-Routine zurückgegebener Wert Erforderlicher Header
strtok_s <string.h>
_strtok_s_l <string.h>
wcstok_s,
_wcstok_s_l
<string.h> oder <wchar.h>
_mbstok_s,
_mbstok_s_l
<mbstring.h>

Zusätzliche Informationen zur Kompatibilität finden Sie unter Compatibility.

Zuordnung generischer Textroutinen

TCHAR.H Routine _UNICODE&_MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tcstok_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

Beispiel

// crt_strtok_s.c
// In this program, a loop uses strtok_s
// to print all the tokens (separated by commas
// or blanks) in two strings at the same time.

#include <string.h>
#include <stdio.h>

char string1[] =
    "A string\tof ,,tokens\nand some  more tokens";
char string2[] =
    "Another string\n\tparsed at the same time.";
char seps[]   = " ,\t\n";
char *token1 = NULL;
char *token2 = NULL;
char *next_token1 = NULL;
char *next_token2 = NULL;

int main(void)
{
    printf("Tokens:\n");

    // Establish string and get the first token:
    token1 = strtok_s(string1, seps, &next_token1);
    token2 = strtok_s(string2, seps, &next_token2);

    // While there are tokens in "string1" or "string2"
    while ((token1 != NULL) || (token2 != NULL))
    {
        // Get next token:
        if (token1 != NULL)
        {
            printf(" %s\n", token1);
            token1 = strtok_s(NULL, seps, &next_token1);
        }
        if (token2 != NULL)
        {
            printf("        %s\n", token2);
            token2 = strtok_s(NULL, seps, &next_token2);
        }
    }
}
Tokens:
A
        Another
string
        string
of
        parsed
tokens
        at
and
        the
some
        same
more
        time.
tokens

Siehe auch

Zeichenfolgenbearbeitung
Gebietsschema
Interpretation von Multibyte-Character Sequenzen
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l