strtok_s、wcstok_s
string.h:インデックス への移動
ヘッダー ファイル
string.h、_str.h
カテゴリ
メモリおよび文字列操作ルーチン
プロトタイプ
char *strtok_s(char * _RESTRICT __s1, rsize_t * _RESTRICT __s1max, const char * _RESTRICT __s2, char ** _RESTRICT __ptr);
wchar_t *wcstok_s(wchar_t * _RESTRICT __s1, rsize_t * _RESTRICT __s1max, const wchar_t * _RESTRICT __s2, wchar_t ** _RESTRICT __ptr);
説明
strtok、_mbstok、wcstok の代わりとなるもので、セキュリティ機能が強化されています。
文字列中のトークンを検索します。トークンは 2 つ目の文字列で定義された区切り文字で区切られます。
strtok_s は、文字列 __s1 がゼロ個以上の一連のテキスト トークンで構成されていて、区切り文字列 __s2 に含まれる 1 つ以上の文字の連なりでそのトークンが区切られているとみなします。
最初に strtok_s を呼び出すと、__s1 中の最初のトークンの最初の文字を指すポインタが返され、__s1 の中の返されたトークンの直後の位置に NULL 文字が書き込まれます。 その後、最初の引数に NULL を指定して呼び出しを繰り返すと、トークンがなくなるまで __s1 に対して同様の処理が続けられます。
区切り文字列 __s2 は呼び出しのたびに異なってもかまいません。 ptr は、同じ __s1 中の別のトークンのスキャンを続けるのに必要な情報を格納するための、ユーザー定義の char* を指定するのに使います。
実行時制約の違反が起きると、strtok_s は __s1 や __s2 のポインタを通じてアクセスすることもありませんし、ptr が指す先に値を格納することもありません。
戻り値
strtok_s は、__s1 中で見つかった最初のトークンを指すポインタを返します。 それ以上トークンがない場合や実行時制約の違反があった場合には、NULL ポインタを返します。
例
#include <string.h> #include <stdio.h> int main(void) { unsigned int s1max = 16; char input[16] = "abc,d"; char *p; char *ptr = " "; /* strtok places a NULL terminator in front of the token, if found */ p = strtok_s(input, &s1max, ",", &ptr); if (p) printf("%s\n", p); /* A second call to strtok using NULL as the first parameter returns a pointer to the character following the token */ p = strtok_s(NULL, &s1max, ",", &ptr); if (p) printf("%s\n", p); return 0; }
移植性
POSIX | Win32 | ANSI C | ANSI C++ | |
---|---|---|---|---|
strtok_s |
+ |
+ |
+ |
+ |
wcstok_s |
+ |
+ |
+ |