strtok_s、_strtok_s_l、wcstok_s、_wcstok_s_l、_mbstok_s、_mbstok_s_lstrtok_s, _strtok_s_l, wcstok_s, _wcstok_s_l, _mbstok_s, _mbstok_s_l

現在のロケールまたは渡されたロケールを使用して、文字列内の次のトークンを検索します。Finds the next token in a string, by using the current locale or a locale that's passed in. これらのバージョンの strtok、_strtok_l、wcstok、_wcstok_l、_mbstok、_mbstok_l は、「CRT のセキュリティ機能」にあるとおり、セキュリティが強化されています。These versions of strtok, _strtok_l, wcstok, _wcstok_l, _mbstok, _mbstok_l have security enhancements, as described in Security Features in the CRT.

重要

_mbstok_s_mbstok_s_lは、Windows ランタイムで実行されるアプリケーションでは使用できません。_mbstok_s and _mbstok_s_l cannot be used in applications that execute in the Windows Runtime. 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。For more information, see CRT functions not supported in Universal Windows Platform apps.

構文Syntax

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

パラメーターParameters

strstr
検索する1つまたは複数のトークンを格納している文字列。A string containing the token or tokens to find.

delimitersdelimiters
使用する区切り文字のセット。The set of delimiter characters to use.

contextcontext
関数の呼び出しの間に位置情報を格納するために使用されます。Used to store position information between calls to the function.

localelocale
使用するロケール。The locale to use.

戻り値Return Value

Strで見つかった次のトークンへのポインターを返します。Returns a pointer to the next token found in str. トークンが見つからない場合はNULLを返します。Returns NULL when no more tokens are found. 各呼び出しは、返されたトークンの後に出現する最初の区切り記号に null 文字を代入することでstrを変更します。Each call modifies str by substituting a null character for the first delimiter that occurs after the returned token.

エラー条件Error Conditions

strstr delimitersdelimiters contextcontext 戻り値Return value 番号errno
NULLNULL 任意any null ポインターへのポインターpointer to a null pointer NULLNULL EINVALEINVAL
任意any NULLNULL 任意any NULLNULL EINVALEINVAL
任意any 任意any NULLNULL NULLNULL EINVALEINVAL

StrNULLでも、コンテキストが有効なコンテキストポインターへのポインターである場合、エラーは発生しません。If str is NULL but context is a pointer to a valid context pointer, there's no error.

RemarksRemarks

関数のstrtok_sファミリは、 str内の次のトークンを検索します。The strtok_s family of functions finds the next token in str. 区切り記号に含まれる文字セットは、現在の呼び出しのstrで検索されるトークンの使用可能な区切り記号を指定します。The set of characters in delimiters specifies possible delimiters of the token to be found in str on the current call. wcstok_s_mbstok_sは、 strtok_sのワイド文字バージョンとマルチバイト文字バージョンです。wcstok_s and _mbstok_s are wide-character and multibyte-character versions of strtok_s. Wcstok_s_wcstok_s_lの引数と戻り値はワイド文字列です。 _mbstok_s_mbstok_s_lのこれらはマルチバイト文字列です。The arguments and return values of wcstok_s and _wcstok_s_l are wide-character strings; those of _mbstok_s and _mbstok_s_l are multibyte-character strings. それ以外では、これらの関数の動作は同じです。These functions behave identically otherwise.

この関数は、パラメーターを検証します。This function validates its parameters. [エラー条件] テーブルのようにエラー状態が発生すると、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーが呼び出されます。When an error condition occurs, as in the Error Conditions table, the invalid parameter handler is invoked, as described in Parameter Validation. 実行の継続が許可された場合、これらの関数はerrnoEINVALに設定し、 NULLを返します。If execution is allowed to continue, these functions set errno to EINVAL and return NULL.

Strtok_sの最初の呼び出しでは、関数は先頭の区切り記号をスキップし、 str内の最初のトークンへのポインターを返して、トークンを null 文字で終了します。On the first call to strtok_s, the function skips leading delimiters and returns a pointer to the first token in str, terminating the token with a null character. Strの残りの部分から、 strtok_sの一連の呼び出しによって、より多くのトークンを分割できます。More tokens can be broken out of the remainder of str by a series of calls to strtok_s. Strtok_sを呼び出すたびに、その呼び出しによって返されたトークンの後に null 文字を挿入することでstrが変更されます。Each call to strtok_s modifies str by inserting a null character after the token returned by that call. コンテキストポインターは、読み取られている文字列と、次のトークンが読み取られる文字列内の位置を追跡します。The context pointer keeps track of which string is being read and where in the string the next token is to be read. Strから次のトークンを読み取るには、 Str引数にNULL値を指定してstrtok_sを呼び出し、同じコンテキストパラメーターを渡します。To read the next token from str, call strtok_s with a NULL value for the str argument, and pass the same context parameter. NULL str引数を指定すると、 strtok_sは、変更されたstr内の次のトークンを検索します。The NULL str argument causes strtok_s to search for the next token in the modified str. 区切り記号の引数は、1回の呼び出しから次の呼び出しまでの任意の値を受け取ることができるため、区切り記号のセットが異なる場合があります。The delimiters argument can take any value from one call to the next so that the set of delimiters may vary.

Contextパラメーターはstrtok_strtok_lで使用される静的バッファーよりも優先されるため、同じスレッドで2つの文字列を同時に解析することができます。Since the context parameter supersedes the static buffers used in strtok and _strtok_l, it's possible to parse two strings simultaneously in the same thread.

出力値は、ロケールのLC_CTYPEカテゴリの設定に影響されます。The output value is affected by the setting of the LC_CTYPE category setting of the locale. 詳細については、「setlocale」をご覧ください。For more information, see setlocale.

_Lサフィックスが付いていないこれらの関数のバージョンでは、このロケールに依存する動作に現在のスレッドロケールが使用されます。The versions of these functions without the _l suffix use the current thread locale for this locale-dependent behavior. _Lサフィックスが付いているバージョンは、 localeパラメーターで指定されたロケールを代わりに使用する点を除いて同じです。The versions with the _l suffix are identical except they instead use the locale specified by the locale parameter. 詳細については、「 Locale」を参照してください。For more information, see Locale.

必要条件Requirements

ルーチンによって返される値Routine 必須ヘッダーRequired header
strtok_sstrtok_s <string.h><string.h>
_strtok_s_l_strtok_s_l <string.h><string.h>
wcstok_swcstok_s,
_wcstok_s_l_wcstok_s_l
<string.h> または <wchar.h><string.h> or <wchar.h>
_mbstok_s_mbstok_s,
_mbstok_s_l_mbstok_s_l
<mbstring.h><mbstring.h>

互換性の詳細については、「 互換性」を参照してください。For additional compatibility information, see Compatibility.

汎用テキスト ルーチンのマップGeneric-Text Routine Mappings

TCHAR.H のルーチンTCHAR.H routine _UNICODE & _MBCS が定義されていません_UNICODE & _MBCS not defined _定義済みの MBCS_MBCS defined _UNICODE が定義されている場合_UNICODE defined
_tcstok_s_tcstok_s strtok_sstrtok_s _mbstok_s_mbstok_s wcstok_swcstok_s
_tcstok_s_l_tcstok_s_l _strtok_s_l_strtok_s_l _mbstok_s_l_mbstok_s_l _wcstok_s_l_wcstok_s_l

Example

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

関連項目See also

文字列操作String Manipulation
ロケールLocale
マルチバイト文字のシーケンスの解釈Interpretation of Multibyte-Character Sequences
strcspn、wcscspn、_mbscspn、_mbscspn_lstrcspn, wcscspn, _mbscspn, _mbscspn_l
strspn、wcsspn、_mbsspn、_mbsspn_lstrspn, wcsspn, _mbsspn, _mbsspn_l