strtok_s、wcstok_s

提供: RAD Studio
移動先: 案内検索

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 の呼び出しは、同じように strtok_s を使用する関数呼び出しとネストさせることはできません。 ネストさせると無限ループの原因となります。

戻り値

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

+

+

+

関連項目