strtok
, , _strtok_l
wcstok
, _wcstok_l
, , _mbstok
_mbstok_l
Sucht das nächste Token in einer Zeichenfolge unter Verwendung des angegebenen Gebietsschemas oder eines Gebietsschemas, das übergeben wird. Sicherere Versionen dieser Funktionen sind verfügbar. Informationen dazu finden Sie unter strtok_s
, _strtok_s_l
, wcstok_s
, _wcstok_s_l
, _mbstok_s
, _mbstok_s_l
.
Wichtig
_mbstok
und _mbstok_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(
char *strToken,
const char *strDelimit
);
char *_strtok_l(
char *strToken,
const char *strDelimit,
_locale_t locale
);
wchar_t *wcstok( /* Non-standard, define _CRT_NON_CONFORMING_WCSTOK to use */
wchar_t *strToken,
const wchar_t *strDelimit
);
wchar_t *wcstok(
wchar_t *strToken,
const wchar_t *strDelimit,
wchar_t **context
);
wchar_t *_wcstok_l(
wchar_t *strToken,
const wchar_t *strDelimit,
_locale_t locale
);
unsigned char *_mbstok(
unsigned char *strToken,
const unsigned char *strDelimit
);
unsigned char *_mbstok_l(
unsigned char *strToken,
const unsigned char *strDelimit,
_locale_t locale
);
Parameter
strToken
Zeichenfolge, die mindestens ein Token enthält.
strDelimit
Gruppe von Trennzeichen.
locale
Zu verwendendes Gebietsschema.
context
Verweist auf den Arbeitsspeicher, der zum Speichern des internen Zustands des Parsers verwendet wird, sodass der Parser fortfahren kann, von wo er beim nächsten Aufruf wcstok
unterbrochen wurde.
Rückgabewert
Gibt einen Zeiger auf das nächste Token zurück, das in strToken
gefunden wird. Die Funktionen werden zurückgegeben NULL
, wenn keine weiteren Token gefunden werden. Jeder Aufruf ändert sich strToken
, indem ein NULL-Zeichen für das erste Trennzeichen ersetzt wird, das nach dem zurückgegebenen Token auftritt.
Hinweise
Die strtok
-Funktion sucht das nächste Token in strToken
. Der Satz von Zeichen in strDelimit
gibt mögliche Trennzeichen des in strToken
gefunden Tokens für den aktuellen Aufruf an. wcstok
und _mbstok
sind Breitzeichen- und Multibytezeichenversionen von strtok
. Die Argumente und der Rückgabewert wcstok
sind Zeichenfolgen mit breitem Zeichen. Die Argumets und der Rückgabewert von _mbstok
sind Multibyte-Zeichenfolgen. Diese drei Funktionen verhalten sich andernfalls identisch.
Die zwei Argumentversion von wcstok
ist nicht standard. Wenn Sie diese Version verwenden müssen, müssen Sie definieren _CRT_NON_CONFORMING_WCSTOK
, bevor Sie #include <wchar.h>
(oder #include <string.h>
).
Wichtig
Diese Funktionen stellen eine mögliche Bedrohung aufgrund eines Pufferüberlaufproblems dar. Pufferüberlaufprobleme werden häufig bei Systemangriffen eingesetzt, da sie zu einer unbefugten Ausweitung der Berechtigungen führen. Weitere Informationen finden Sie unter Vermeiden von Pufferüberläufen.
Beim ersten Aufruf von strtok
überspringt die Funktion vorangestellte Trennzeichen, gibt einen Zeiger auf das erste Token in strToken
zurück und beendet das Token mit einem NULL-Zeichen. Vom restlichen strToken
können weitere Token durch mehrere Aufrufe von strtok
geholt werden. Jeder Aufruf zur strtok
Änderung strToken
durch Einfügen eines NULL-Zeichens nach dem von diesem token
Aufruf zurückgegebenen Zeichen. Um das folgende Token von strToken
zu lesen, rufen Sie strtok
auf, und geben Sie dabei einen NULL
-Wert für das strToken
-Argument an. Das NULL
strToken
Argument bewirkt strtok
, dass nach dem nächsten Token in der geänderten Datei gesucht wird strToken
. Das strDelimit
-Argument kann zwischen zwei Aufrufen jeden beliebigen Wert annehmen, damit der Satz von Trennzeichen variieren kann.
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 Gebietsschema für dieses gebietsschemaabhängiges Verhalten. Die Versionen mit dem _l
Suffix sind identisch, mit der Ausnahme, dass sie stattdessen den übergebenen Gebietsschemaparameter verwenden. Weitere Informationen finden Sie unter Locale.
Hinweis
Jede Funktion verwendet eine statische Variable eines lokalen Threads, um die Zeichenfolge in Token zu analysieren. Daher können mehrere Threads diese Funktionen gleichzeitig aufrufen, ohne dass unerwünschte Auswirkungen auftreten. Innerhalb eines einzelnen Threads ist es jedoch wahrscheinlich, dass ein überlappendes Aufrufen von einer dieser Funktionen zu Datenbeschädigung und ungenauen Ergebnissen führt. Beim Analysieren verschiedener Zeichenfolgen sollte zuerst eine Zeichenfolge zu Ende analysiert werden, bevor mit dem Analysieren der nächsten Zeichenfolge begonnen wird. Berücksichtigen Sie auch das mögliche Risiko, wenn Sie eine dieser Funktionen aus einer Schleife heraus aufrufen, in der eine andere Funktion aufgerufen wird. Wenn die andere Funktion eine dieser Funktionen verwendet, kommt es zu einer überlappenden Sequenz von Aufrufen und Datenbeschädigung ist die Folge.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Mapping generischer Textroutinen
TCHAR.H -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Anforderungen
Routine | Erforderlicher Header |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> oder <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt_strtok.c
// compile with: /W3
// In this program, a loop uses strtok
// to print all the tokens (separated by commas
// or blanks) in the string named "string".
//
#include <string.h>
#include <stdio.h>
char string[] = "A string\tof ,,tokens\nand some more tokens";
char seps[] = " ,\t\n";
char *token;
int main( void )
{
printf( "Tokens:\n" );
// Establish string and get the first token:
token = strtok( string, seps ); // C4996
// Note: strtok is deprecated; consider using strtok_s instead
while( token != NULL )
{
// While there are tokens in "string"
printf( " %s\n", token );
// Get next token:
token = strtok( NULL, seps ); // C4996
}
}
Tokens:
A
string
of
tokens
and
some
more
tokens
Siehe auch
Zeichenfolgenbearbeitung
Gebietsschema
Interpretation von Multibytezeichensequenzen
strcspn
, , wcscspn
_mbscspn
_mbscspn_l
strspn
, , wcsspn
_mbsspn
_mbsspn_l