char *strtok(char *s1, const char *s2);
s2 文字列を切り分けるための文字からなる文字列へのポインタ
strtok関数は文字列を切り分けるために連続的に呼び出されます。
s1で指された文字列を先頭からs2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。
以前に切り分けられた字句の次の文字から、s2で指された文字列中の文字によって字句に切り分けます。その結果字句に切り分けられれば、その字句の先頭へのポインタを、分けられなければNULLをリターン値として返します。
2回目以降の呼び出しの時は、第1引数にはNULLを指定します。また、s2で指された文字列は呼び出しのたびに異なっていてもかまいません。切り出された字句の最後にはヌル文字が付きます。
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関数を呼び出します。