tail head cat sleep
QR code linking to this page

manページ  — STRTOK

名称

strtok – 文字列のトークン

内容

ライブラリ

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 を指定する必要があります。 同じ文字列からさらにトークンを取得するために 続いて呼び出すときには、 代わりに空ポインタを渡す必要があります。 セパレータ文字列 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 C90") に適合しています。

バグ

System V の strtok() は、区切り文字のみからなる文字列を渡された場合は、 次の開始点を変更しません。 異なる (または空の) 区切り文字列を使った strtok() の呼び出しで、 NULL 以外の値を返せるようにするためです。 この実装では常に次の開始点を変更するので、 そのような呼び出しが続く時は常に NULL を返すことになります。

作者

Wes Peters, Softweyr LLC: <wes@softweyr.com>

FreeBSD 3.0 での実装に基づきます。


STRTOK (3) November 27, 1998

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

If you are angry with someone, you should walk a mile in their shoes - then you'll be a mile away from them, and you'll have their shoes.