Condividi tramite


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

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. Se l'argomento strToken è NULL, strtok cerca il token successivo nella versione modificata di 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