strtok
, _strtok_l
, wcstok
, _wcstok_l
, _mbstok
_mbstok_l
Trova il token successivo in una stringa, usando le impostazioni locali correnti o le impostazioni locali specificate passate. Sono disponibili versioni più sicure di queste funzioni; vedere strtok_s
, _strtok_s_l
, wcstok_s
_wcstok_s_l
, , _mbstok_s
, . _mbstok_s_l
Importante
_mbstok
e _mbstok_l
non possono essere usati nelle applicazioni eseguite in Windows Runtime. Per altre informazioni, vedere Funzioni CRT non supportate nelle app della piattaforma UWP (Universal Windows Platform).
Sintassi
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
);
Parametri
strToken
Stringa contenente il token o i token.
strDelimit
Set di caratteri di delimitazione.
locale
Impostazioni locali da usare.
context
Punta alla memoria usata per archiviare lo stato interno del parser in modo che il parser possa continuare da dove è stato interrotto alla successiva chiamata wcstok
di .
Valore restituito
Restituisce un puntatore al successivo token trovato in strToken
. Le funzioni restituiscono NULL
quando non vengono trovati altri token. Ogni chiamata modifica strToken
sostituendo un carattere Null per il primo delimitatore che si verifica dopo il token restituito.
Osservazioni:
La funzione strtok
trova il token successivo in strToken
. Il set di caratteri in strDelimit
specifica i possibili delimitatori del token da trovare in strToken
per la chiamata corrente. wcstok
e _mbstok
sono versioni con caratteri wide e caratteri multibyte di strtok
. Gli argomenti e il valore restituito di sono stringhe di wcstok
caratteri wide. Gli argumet e il valore restituito di sono stringhe di _mbstok
caratteri multibyte. A parte ciò, queste tre funzioni si comportano in modo identico.
La versione a due argomenti di wcstok
non è standard. Se è necessario usare tale versione, è necessario definire _CRT_NON_CONFORMING_WCSTOK
prima #include <wchar.h>
di (o #include <string.h>
).
Importante
Queste funzioni possono incorrere in una minaccia potenziale dovuta a un problema di sovraccarico del buffer. I problemi di sovraccarico del buffer sono usati spesso come metodo di attacco di sistema e provocano un'elevazione dei privilegi non autorizzata. Per altre informazioni, vedere Evitare sovraccarichi del buffer.
Nella prima chiamata a strtok
la funzione ignora i delimitatori iniziali e restituisce un puntatore al primo token in strToken
, aggiungendo un carattere Null di terminazione al token. Possono essere suddivisi altri token dal resto di strToken
tramite una serie di chiamate a strtok
. Ogni chiamata a strtok
modifica strToken
inserendo un carattere Null dopo che è token
stato restituito da tale chiamata. Per leggere il token successivo da strToken
, chiamare strtok
con un valore NULL
per l'argomento strToken
. L'argomento NULL
strToken
causa strtok
la ricerca del token successivo nell'oggetto modificato strToken
. L'argomento strDelimit
può accettare qualsiasi valore da una chiamata alla successiva, quindi il set di delimitatori può variare.
Il valore di output è interessato dall'impostazione dell'impostazione LC_CTYPE
della categoria delle impostazioni locali. Per ulteriori informazioni, vedere setlocale
.
Le versioni di queste funzioni senza il _l
suffisso usano le impostazioni locali correnti per questo comportamento dipendente dalle impostazioni locali. Le versioni con il _l
suffisso sono identiche, ad eccezione del fatto che usano il parametro delle impostazioni locali passato. Per altre informazioni, vedere Locale.
Nota
Ogni funzione usa una variabile statica thread-local per la suddivisione della stringa in token. Più thread possono quindi chiamare contemporaneamente queste funzioni senza effetti indesiderati. Tuttavia, all'interno di un singolo thread, è molto probabile che l'esecuzione interleaved di chiamate a una di queste funzioni causi il danneggiamento dei dati e risultati non accurati. Quando si analizzano stringhe diverse, completare l'analisi di una stringa prima di iniziare ad analizzare la successiva. Tenere anche conto del potenziale pericolo quando si chiama una di queste funzioni da un ciclo in cui viene chiamata un'altra funzione. Se l'altra funzione usa una di queste funzioni, ne risulterà una sequenza interleaved di chiamate con conseguente danneggiamento dei dati.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Mapping di routine di testo generico
TCHAR.H routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok |
_strtok_l |
_mbstok_l |
_wcstok_l |
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
strtok |
<string.h> |
wcstok |
<string.h> oppure <wchar.h> |
_wcstok_l |
<tchar.h> |
_mbstok , _mbstok_l |
<mbstring.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
// 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
Vedi anche
Manipolazione delle stringhe
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
strcspn
, wcscspn
, _mbscspn
_mbscspn_l
strspn
, wcsspn
, _mbsspn
_mbsspn_l