Share via


strtok_s、_strtok_s_l、wcstok_s、_wcstok_s_l、_mbstok_s、_mbstok_s_l

渡された現在のロケールまたはロケールを使用して文字列の次のトークンを検索します。これらの関数は、「CRT のセキュリティ機能」に説明されているように、strtok、_strtok_l、wcstok、_wcstok_l、_mbstok、_mbstok_l のセキュリティが強化されたバージョンです。

重要 : 重要

_mbstok_s と _mbstok_s_l は、Windows のランタイムで実行するアプリケーションで使用することはできません。詳細については、でサポート /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 を返します。各呼び出しは、返されたトークンの後に発生最初の区切り記号 NULL の文字に置き換えることで strToken を変更します。

エラー条件

strToken

strDelimit

context

戻り値

errno

NULL

任意

null ポインターへのポインター。

NULL

EINVAL

任意

NULL

任意

NULL

EINVAL

任意

任意

NULL

NULL

EINVAL

strToken が NULL 場合は、コンテキストが有効なコンテキストのポインターへのポインター、エラーがありません。

解説

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_s

strtok_s

_mbstok_s

wcstok_s

_tcstok_s_l

_strtok_s_l

_mbstok_s_l

_wcstok_s_l

strtok_s への最初の呼び出しで関数の先頭の区切り記号を使用しないで、null 文字を含むトークンを終了する strTokenの最初のトークンへのポインターを返します。詳細に strtok_sトークンはに一連の呼び出しによって strToken の残りの作成できます。strtok_s に対する各呼び出しは、その呼び出しによって返されるトークンの後に null 文字を挿入して strToken を変更します。文字列を読み込み中、および位置に文字列の次のトークン読む必要のある context のポインター追跡します。strTokenから次のトークンを読み取るには、strToken の引数の NULL の値を持つ strtok_s を呼び出し、context の同じパラメーターを渡します。NULLstrToken の引数により strtok_s が変更された strTokenの次のトークンを検索します。strDelimit の引数は区切り記号のセットが異なるように、1 種類の呼び出しから次の値を設定できます。

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

出力値は、ロケールの LC_CTYPE カテゴリの設定で決まります。詳細については、「setlocale」を参照してください。_l サフィックスが付いていないこの関数のバージョンでは、このロケールに依存する動作に現在のロケールを使用します。_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>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

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

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

関連項目

文字列操作 (CRT)

ロケール

マルチバイト文字のシーケンスの解釈

strcspn、wcscspn、_mbscspn、_mbscspn_l

strspn、wcsspn、_mbsspn、_mbsspn_l