Everything

strtok


指定した文字列をいくつかの字句に切り分けます。

[指定形式]

#include <string.h>

char *strtok(char *s1, const char *s2);

[引数]

s1 いくつかの字句に切り分ける文字列へのポインタ

s2 文字列を切り分けるための文字からなる文字列へのポインタ

[戻り値]

字句に切り分けられた時:切り分けた字句の先頭へのポインタ

字句に切り分けられなかった時:NULL

[備考]

strtok関数は文字列を切り分けるために連続的に呼び出されます。

(a)

最初の呼び出し時

s1で指された文字列を先頭からs2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。

(b)

2回目以降の呼び出し時

以前に切り分けられた字句の次の文字から、s2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。

2回目以降の呼び出しの時は、第1引数にはNULLを指定します。また、s2で指された文字列は呼び出しのたびに異なっていてもかまいません。切り出された字句の最後にはヌル文字が付きます。

strtok関数の使用例を以下に示します。

 

            1  #include <string.h>
            2  static char s1[]="a@b,@c/@d";
            3  char *ret;
            4
            5  ret=strtok(s1,"@");
            6  ret=strtok(NULL,",@");
            7  ret=strtok(NULL,"/@");
            8  ret=strtok(NULL,"@");

 

【説明】

この例は、文字列「"a@b,@c/@d"」をstrtok関数を用いてa,b,c,dという字句に切り分けるプログラムを示しています。

2行目で文字列s1に初期値として、文字列"a@b,@c/@d"を設定しています。

5行目では、「@」を区切り文字として字句を切り分けるため、strtok関数を呼び出します。この結果、文字'a'へのポインタがリターン値として得られ、文字'a'の次の最初の区切り文字である「@」にヌル文字を埋め込みます。この結果、文字列"a"が切り出されます。

以下、同一の文字列から次々に字句を切り出すために第1引数にNULLを指定してstrtok関数を呼び出します。

この結果、文字列"b"、"c"、"d"が次々に切り出されます。