STRTOK(3) | FreeBSD Library Functions Manual | STRTOK(3) |
名称
strtok, strtok_r — 文字列のトークンライブラリ
Standard C Library (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 が指定されるべきです。同じ文字列からさらにトークンを得たい続く呼び出しは、代わりに NULL ポインタを渡すべきです。セパレータの文字列 sep は、毎回供給されなければならず、呼び出し間に変更できます。
あたかも strtok() を呼び出すライブラリ関数がないように振る舞います。
strtok_r() 関数は、 strtok() の再入可能 (リエントラント) なバージョンです。コンテキストポインタ last は、各呼び出しで提供されなければなりません。また、 strtok_r() 関数は、個別のコンテキストポインタが使用されている限り、お互いの内側で 2 つの解析ループを入れ子にするために使用されます。
strtok() と strtok_r() 関数は、トークン自体を ヌル 文字で置き換えた後に、文字列のそれぞれの続くトークンの始まりへのポインタを返します。これ以上トークンが残らないとき、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), wcstok(3)規格
strtok() 関数は、 ISO/IEC 9899:1990 (“ISO C90”) に適合しています。作者
, Softweyr LLC: <wes@softweyr.com>FreeBSD 3.0 の実装に基づいています。
バグ
System V の strtok() は、デリミタ (区切り) 文字だけを含んでいる文字列を渡されたなら、異なる (または空の) デリミタの文字列付けて strtok() を呼び出すことが、 NULL 以外の値を返すことができるように、次の開始点を変更しません。この実装は、次の開始点を常に変更するので、そのような呼び出しのシーケンスは、常に NULL を返します。November 27, 1998 | FreeBSD |