strtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

現在のロケールまたは渡されたロケールを使用して、文字列内の次のトークンを検索します。 これらのバージョンの , , , , _wcstok_l_mbstok_l_mbstok には、CRT のセキュリティ機能に関する説明に従って、セキュリティが強化されています。 wcstok_strtok_lstrtok

重要

_mbstok_s および _mbstok_s_l は、Windows ランタイムで実行するアプリケーションでは使用できません。 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。

構文

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
);

パラメーター

str
検索する 1 つまたは複数のトークンを格納している文字列。

delimiters
使用する区切り記号文字のセット。

context
関数の呼び出しと呼び出しの間の位置情報の格納に使用されます。

locale
使用するロケール。

戻り値

str で見つかった次のトークンへのポインターを返します。 これ以上トークンがない場合、NULL を返します。 呼び出しのたびに、返されるトークンの後に現れる最初の区切り記号を null 文字に置き換えることで str が変更されます。

エラー条件

str delimiters context 戻り値 errno
NULL any null ポインターへのポインター NULL EINVAL
any NULL any NULL EINVAL
any any NULL NULL EINVAL

strNULL ですが、context が有効なコンテキストのポインターへのポインターの場合は、エラーは発生しません。

解説

関数の strtok_s ファミリは str で次のトークンを探します。 delimiters の文字セットは、現在の呼び出しの str で検索されたトークンの使用可能な区切り記号を指定します。 wcstok_s 関数と _mbstok_s 関数は、strtok_s 関数のワイド文字バージョンとマルチバイト文字バージョンです。 引数と戻り値wcstok_s_wcstok_s_lはワイド文字列です。 引数と戻り値_mbstok_s_mbstok_s_lはマルチバイト文字列です。 それ以外では、これらの関数の動作は同じです。

この関数は、パラメーターを検証します。 エラー条件テーブルのように、エラー条件が発生すると、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は errnoEINVAL に設定し、NULL を返します。

strtok_s への最初の呼び出しで、関数は先行する区切り記号をスキップし、str の最初のトークンへのポインターを返して null 文字を含むトークンを終了します。 str への一連の呼び出しにより、より多くのトークンを strtok_s の残りから作成できます。 strtok_s への各呼び出しは、その呼び出しによって返されるトークンの後に null 文字を挿入することで str を変更します。 context ポインターは、読み込まれる文字列、および次のトークンが読み込まれる文字列内の位置を追跡し続けます。 str から次のトークンを読み込むには、strtok_sNULL 引数に str 値を使用して呼び出し、同じ context パラメーターを渡します。 NULLstr 引数により、strtok_s は変更された str で次のトークンを検索します。 delimiters 引数は、ある呼び出しから次の呼び出しへ任意の値を取ることができるため、区切り記号のセットが異なる場合があります。

context パラメーターは strtok_strtok_l で使用される静的バッファーよりも優先されるため、同じスレッドで 2 つの文字列を同時に分析できます。

出力値は、ロケールの LC_CTYPE カテゴリ設定の設定によって影響を受けます。 詳細については、setlocaleを参照してください。

これらの関数の _l サフィックスのないバージョンは、ロケールに依存するこの動作で現在のスレッド ロケールを使用します。 _l サフィックスが付いているバージョンは、locale パラメーターで指定されるロケールを代わりに使用する点を除き同じです。 詳細については、「 Locale」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

汎用テキスト ルーチンのマップ

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tcstok_s strtok_s _mbstok_s wcstok_s
_tcstok_s_l _strtok_s_l _mbstok_s_l _wcstok_s_l

必要条件

ルーチンによって返される値 必須ヘッダー
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>

互換性の詳細については、「 Compatibility」を参照してください。

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

関連項目

文字列操作
ロケール
マルチバイト文字シーケンスの解釈
strcspn, wcscspn, _mbscspn, _mbscspn_l
strspn, wcsspn, _mbsspn, _mbsspn_l