strtok_s
、 _strtok_s_l
、 wcstok_s
、 _wcstok_s_l
、 _mbstok_s
、 _mbstok_s_l
現在のロケールまたは渡されたロケールを使用して、文字列内の次のトークンを検索します。 これらのバージョンのstrtok
、_strtok_l
、wcstok
、_wcstok_l
、_mbstok
_mbstok_l
、「CRT のSecurity 機能」で説明されているように、セキュリティが強化されています。
重要
_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 |
任意 | null ポインターへのポインター | NULL |
EINVAL |
任意 | NULL |
任意 | NULL |
EINVAL |
任意 | 任意 | NULL |
NULL |
EINVAL |
str
が NULL
ですが、context
が有効なコンテキストのポインターへのポインターの場合は、エラーは発生しません。
解説
関数の strtok_s
ファミリは str
で次のトークンを探します。 delimiters
の文字セットは、現在の呼び出しの str
で検索されたトークンの使用可能な区切り記号を指定します。 wcstok_s
関数と _mbstok_s
関数は、strtok_s
関数のワイド文字バージョンとマルチバイト文字バージョンです。 wcstok_s
と_wcstok_s_l
の引数と戻り値はワイド文字列です。 _mbstok_s
と_mbstok_s_l
の引数と戻り値はマルチバイト文字列です。 それ以外では、これらの関数の動作は同じです。
この関数は、パラメーターを検証します。 エラー条件テーブルのように、エラー条件が発生すると、「パラメーターの検証 で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、これらの関数は errno
を EINVAL
に設定し、NULL
を返します。
strtok_s
への最初の呼び出しで、関数は先行する区切り記号をスキップし、str
の最初のトークンへのポインターを返して null 文字を含むトークンを終了します。 str
への一連の呼び出しにより、より多くのトークンを strtok_s
の残りから作成できます。 strtok_s
への各呼び出しは、その呼び出しによって返されるトークンの後に null 文字を挿入することで str
を変更します。 context
ポインターは、読み込まれる文字列、および次のトークンが読み込まれる文字列内の位置を追跡し続けます。 str
から次のトークンを読み込むには、strtok_s
を NULL
引数に str
値を使用して呼び出し、同じ context
パラメーターを渡します。 NULL
str
引数を指定すると、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