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 を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。