strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

Trova il token successivo in una stringa, usando le impostazioni locali correnti o le impostazioni locali passate. Queste versioni di strtok, _strtok_l_wcstok_lwcstok, _mbstok, _mbstok_l includono miglioramenti della sicurezza, come descritto in Funzionalità di sicurezza in CRT.

Importante

_mbstok_s e _mbstok_s_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_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
);

Parametri

str
Stringa contenente il token o i token da trovare.

delimiters
Set di caratteri delimitatori da utilizzare.

context
Consente di archiviare le informazioni sulla posizione tra le chiamate alla funzione.

locale
Impostazioni locali da usare.

Valore restituito

Restituisce un puntatore al successivo token trovato in str. Restituisce NULL quando non vengono trovati altri token. Ogni chiamata modifica str sostituendo un carattere Null per il primo delimitatore che si verifica dopo il token restituito.

Condizioni di errore

str delimiters context Valore restituito errno
NULL qualsiasi puntatore a un puntatore Null NULL EINVAL
qualsiasi NULL qualsiasi NULL EINVAL
qualsiasi qualsiasi NULL NULL EINVAL

Se str è NULL ma context è un puntatore a un puntatore di contesto valido, non viene visualizzato alcun errore.

Osservazioni:

La strtok_s famiglia di funzioni trova il token successivo in str. Il set di caratteri in delimiters specifica i possibili delimitatori del token da trovare in str per la chiamata corrente. wcstok_s e _mbstok_s sono versioni con caratteri wide e caratteri multibyte di strtok_s. Gli argomenti e i valori restituiti di e _wcstok_s_l sono stringhe di wcstok_s caratteri wide. Gli argomenti e i valori restituiti di _mbstok_s e _mbstok_s_l sono stringhe di caratteri multibyte. A parte ciò, queste funzioni si comportano in modo identico.

Questa funzione convalida i relativi parametri. Quando si verifica una condizione di errore, come nella tabella Condizioni di errore, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni impostano errno su EINVAL e restituiscono NULL.

Nella prima chiamata a strtok_s la funzione ignora i delimitatori iniziali e restituisce un puntatore al primo token in str, aggiungendo un carattere Null di terminazione al token. Possono essere suddivisi altri token dal resto di str tramite una serie di chiamate a strtok_s. Ogni chiamata a strtok_s modifica str inserendo un carattere Null dopo il token restituito dalla chiamata. Il puntatore context tiene traccia della stringa letta e della posizione nella stringa in cui deve essere letto il token successivo. Per leggere il token successivo da str, chiamare strtok_s con un valore NULL per l'argomento str e passare lo stesso parametro context. Se l'argomento str è NULL, strtok_s cerca il token successivo nella versione modificata di str. L'argomento delimiters può accettare qualsiasi valore da una chiamata alla successiva, quindi il set di delimitatori può variare.

Poiché il context parametro sostituisce i buffer statici usati in strtok e _strtok_l, è possibile analizzare due stringhe contemporaneamente nello stesso thread.

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 del thread corrente per questo comportamento dipendente dalle impostazioni locali. Le versioni con il _l suffisso sono identiche, ma usano invece le impostazioni locali specificate dal locale parametro . Per altre informazioni, vedere Locale.

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_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

Requisiti

Ciclo Intestazione obbligatoria
strtok_s <string.h>
_strtok_s_l <string.h>
wcstok_s,
_wcstok_s_l
<string.h> oppure <wchar.h>
_mbstok_s,
_mbstok_s_l
<mbstring.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

// 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

Vedi anche

Manipolazione delle stringhe
impostazioni locali
Interpretazione di sequenze di caratteri multibyte
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l