strtok() — ストリングのトークン化

フォーマット

#include <string.h>
char *strtok(char *string1, const char *string2);

言語レベル

ANSI

スレッド・セーフ

いいえ

代わりに strtok_r() を使用します。

ロケール依存

この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。詳細については、CCSID およびロケールの理解を参照してください。

説明

strtok() 関数は、string1 をゼロ個以上のトークンのシリーズとして読み取り、 string2string1 内のトークンの区切り文字として役立つ 文字のセットとして読み取ります。string1 内のトークンは、 string2 からの 1 つ以上の区切り文字によって分離することができます。string1 内のトークンは、strtok() 関数への一連の呼び出しによって見つかります。

指定された string1 に関する strtok() 関数への最初の呼び出しで、 strtok() 関数は先行区切り文字をスキップして、string1 内の最初のトークンを検索します。最初のトークンへのポインターが戻されます。

strtok() 関数が NULL string1 引数で呼び出されると、 次のトークンは最後のヌル以外の string1 パラメーターの保管済みコピーから読み取られます。それぞれの区切り文字は、ヌル文字で置き換えられます。 区切り文字のセットは呼び出しごとに異なるため、string2 は任意の値を取ることができます。string1 の初期値は、 strtok() 関数への呼び出し後は保存されないことに注意してください。

strtok() 関数は日付をバッファーに書き込むことに注意してください。この関数が受け渡されるバッファーは、strtok() 関数によって損傷を受けることになるため、トークン化されるストリングは、重要ではないバッファーに組み込まれるようにしてください。

戻り値

strtok() 関数の最初の呼び出し時に、 string1 内の最初のトークンへのポインターを戻します。同じトークン・ストリングでの 以後の呼び出しで、strtok() 関数は、ストリング内の次のトークンへのポインターを 戻します。トークンがなくなると、NULL ポインターが戻されます。 すべてのトークンはヌル終了されます。
注: strtok() 関数は内部静的ポインターを使用して、 トークン化されているストリング内の次のトークンを指します。 strtok() 関数の再入可能バージョン strtok_r() (内部静的ストレージを使用しない) を strtok() 関数の代わりに使用することができます。

この例ではループを使用して、トークンが残らなくなるまでコンマで区切られた トークンをストリングから収集します。この例では、トークン a stringof、および tokens を出力します。
#include <stdio.h>
#include <string.h>
 
int main(void)
{
   char *token, *string = "a string, of, ,tokens¥0,after null terminator";
 
   /* the string pointed to by string is broken up into the tokens
      "a string", " of", " ", and "tokens" ; the null terminator (¥0)
      is encountered and execution stops after the token "tokens"     */
   token = strtok(string, ",");
   do
   {
      printf("token: %s¥n", token);
   }
   while (token = strtok(NULL, ","));
}
 
/*****************  Output should be similar to:  *****************
 
token: a string
token:  of
token:
token: tokens
*/