建議使用 Visual Studio 2017

strtok_s、_strtok_s_l、wcstok_s、_wcstok_s_l、_mbstok_s、_mbstok_s_l

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

使用目前的地區設定或傳入的地區設定,在字串中,尋找下一個語彙基元。 這些版本的strtok、 _strtok_l、 wcstok、 _wcstok_l、 _mbstok、 _mbstok_l有安全性增強功能,如述CRT 中的安全性功能

System_CAPS_ICON_important.jpg 重要

在 Windows 執行階段中執行的應用程式中無法使用 _mbstok_s_mbstok_s_l。 如需詳細資訊,請參閱 /ZW 不支援 CRT 函式

  
      char *strtok_s(  
char *strToken,  
const char *strDelimit,  
   char **context  
);  
char *_strtok_s_l(  
char *strToken,  
const char *strDelimit,  
   char **context,  
_locale_tlocale  
);  
wchar_t *wcstok_s(  
wchar_t *strToken,  
const wchar_t *strDelimit,   
   wchar_t**context  
);  
wchar_t *_wcstok_s_l(  
wchar_t *strToken,  
const wchar_t *strDelimit,   
   wchar_t**context,  
_locale_tlocale  
);  
unsigned char *_mbstok_s(  
unsigned char*strToken,  
const unsigned char *strDelimit,   
   char **context  
);  
unsigned char *_mbstok_s(  
unsigned char*strToken,  
const unsigned char *strDelimit,   
   char **context,  
_locale_tlocale  
);  

參數

strToken
字串,包含權杖。

strDelimit
分隔符號字元組。

context
用來儲存呼叫之間的位置資訊strtok_s

locale
要使用的地區設定。

傳回下一步中找到的語彙基元的指標strToken。 它們會傳回NULL時發現沒有 token。 每個呼叫會修改strToken以替代NULL第一個傳回的語彙基元之後發生的分隔符號字元。

錯誤狀況

strTokenstrDelimitcontext傳回值errno
NULL任何null 指標的指標NULLEINVAL
任何NULL任何NULLEINVAL
任何任何NULLNULLEINVAL

如果strTokenNULL但內容是有效的內容指標的指標,沒有發生錯誤。

strtok_s函式會尋找下一個語彙基元strToken。 中的字元組strDelimit指定可以分隔符號語彙基元存放在strToken上目前的呼叫。 wcstok_s_mbstok_s是寬字元和多位元組字元版本的strtok_s。 引數和傳回值wcstok_s_wcstok_s_l是寬字元字串;_mbstok_s_mbstok_s_l是多位元組字元字串。 除此之外,這三個函式的行為相同。

這個函式會驗證它的參數。 如果發生錯誤狀況,如下所示的錯誤狀況資料表無效參數處理常式叫用時,所述參數驗證。 如果允許繼續執行,這些函式會將 errno 設為 EINVAL,並傳回 NULL

一般文字常式對應

TCHAR.H 常式未定義 _UNICODE 和 _MBCS_MBCS 已定義_UNICODE 已定義
_tcstok_sstrtok_s_mbstok_swcstok_s
_tcstok_s_l_strtok_s_l_mbstok_s_l_wcstok_s_l

在第一次呼叫strtok_s函式會略過前導分隔符號,並傳回在第一個語彙基元的指標strToken,終止 null 字元的語彙基元。 多個語彙基元可以中斷的其餘部分超出strToken透過一連串的呼叫strtok_s。 每次呼叫strtok_s修改strToken該呼叫所傳回的語彙基元之後插入一個 null 字元。 context正在讀取的字串,因此其在字串中的下一個語彙基元是要讀取追蹤的指標。 若要讀取的下一個權杖strToken,呼叫strtok_sNULLstrToken引數,並傳遞相同context參數。 NULL strToken引數會strtok_s搜尋中修改過的下一個語彙基元strTokenstrDelimit引數可以讀取到下一次呼叫的任何值,這樣的分隔符號集可能會有所不同。

由於context參數取代使用中的靜態緩衝區strtok_strtok_l,就可以同時在同一執行緒中的兩個字串的剖析。

輸出值會受到設定LC_CTYPE類別設定的地區設定; 請參閱setlocale如需詳細資訊。 這些沒有 _l 後置字元的函式版本,會針對此與地區設定相關的行為使用目前的地區設定;具有 _l 後置字元的版本也一樣,只不過它們會改用傳遞的地區設定參數。 如需詳細資訊,請參閱 Locale

常式必要的標頭
strtok_s<string.h>
_strtok_s_l<string.h>
wcstok_s,

 _wcstok_s_l
<string.h> 或 <wchar.h>
_mbstok_s,

 _mbstok_s_l
<mbstring.h>

如需其他相容性資訊,請參閱 相容性

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

不適用。 若要呼叫標準 C 函式,請使用 PInvoke。 如需詳細資訊,請參閱 平台叫用範例

字串操作
地區設定
多位元組字元序列的解譯
strcspn、 wcscspn、 _mbscspn、 _mbscspn_l
strspn、 wcsspn、 _mbsspn、 _mbsspn_l

顯示: