STRTOK(3) FreeBSD ライブラリ関数マニュアル STRTOK(3)
名称
strtok, strtok_r − 文字列のトークン |
ライブラリ
標準 C ライブラリ (libc, −lc) |
書式
#include <string.h> char * |
strtok(char *str, const char *sep); char * |
strtok_r(char *str, const char *sep, char **last); |
解説 |
このインタフェースは strsep(3) によって置き換えられました。 strtok() 関数は、ヌルで終端された文字列 str の中の連続するトークンを分割 するために用いられます。これらのトークンは、その文字列内で sep の中の文字 の少なくとも 1 つによって区分されています。最初に strtok() を呼び出すとき には、 str を指定する必要があります。同じ文字列からさらにトークンを取得す るために続いて呼び出すときには、代わりに空ポインタを渡す必要があります。 セパレータ文字列 sep は毎回与えなければなりませんが、呼び出しのたびに変更 しても構いません。 ライブラリは、実装上、他のライブラリ関数が strtok() を呼び出したりしない かのように動作します。 strtok_r() 関数は strtok() の再入可能なバージョンです。コンテキストポイン タ last は、呼び出し毎に与えなければなりません。 strtok_r() は、別々のコ ンテキストポインタが使われている限りでは、お互いの内部で 2 つのパースルー プを入れ子にするためにも使えます。 strtok() および strtok_r() 関数は、そのトークン自体を NUL 文字で置き換え た後、文字列の次のトークンの先頭へのポインタを返します。トークンがなくな ると、NULL ポインタを返します。 |
例
次の例では、別々のコンテキストを使って 2 つの文字列をパースするために strtok_r() を使っています: char test[80], blah[80]; char *sep = "\\/:;=-"; char *word, *phrase, *brkt, *brkb; strcpy(test, "This;is.a:test:of=the/string\\tokenizer-function."); for (word = strtok_r(test, sep, &brkt); word; word = strtok_r(NULL, sep, &brkt)) { strcpy(blah, "blah:blat:blab:blag"); for (phrase = strtok_r(blah, sep, &brkb); phrase; phrase = strtok_r(NULL, sep, &brkb)) { printf("So far we’re at %s:%s\n", word, phrase); } } |
関連項目
memchr(3), strchr(3), strcspn(3), strpbrk(3), strrchr(3), strsep(3), strspn(3), strstr(3) |
規格
strtok() 関数は、 ISO/IEC 9899:1990 (‘‘ISO C89’’) に適合しています。 |
バグ
System V の strtok() は、区切り文字のみからなる文字列を渡された場合は、次 の開始点を変更しません。異なる (または空の) 区切り文字列を使った strtok() の呼び出しで、 NULL 以外の値を返せるようにするためです。この実装では常に 次の開始点を変更するので、そのような呼び出しが続く時は常に NULL を返すこ とになります。 |
作者
Wes Peters, Softweyr LLC: 〈wes@softweyr.com〉 FreeBSD 3.0 での実装に基づきます。 FreeBSD 10.0 November 27, 1998 FreeBSD 10.0 |