STRTOK

Section: C Library Functions (3)
索引 jman

BSD mandoc
 

索引

名称

strtok , strtok_r - 文字列のトークン  

索引

ライブラリ

Lb libc  

索引

書式

In string.h Ft char * Fn strtok char *str const char *sep Ft char * Fn strtok_r char *str const char *sep char **last  

索引

解説

Bf -symbolic このインタフェースは strsep(3) によって置き換えられました。 Ef

Fn strtok 関数は、ヌルで終端された文字列 Fa str の中の連続するトークンを分割するために用いられます。 これらのトークンは、その文字列内で Fa sep の中の文字の少なくとも 1 つによって区分されています。 最初に Fn strtok を呼び出すときには、 Fa str を指定する必要があります。 同じ文字列からさらにトークンを取得するために 続いて呼び出すときには、 代わりに空ポインタを渡す必要があります。 セパレータ文字列 Fa sep は毎回与えなければなりませんが、 呼び出しのたびに変更しても構いません。

ライブラリは、実装上、他のライブラリ関数が Fn strtok を呼び出したりしないかのように動作します。

Fn strtok_r 関数は Fn strtok の再入可能なバージョンです。 コンテキストポインタ Fa last は、呼び出し毎に与えなければなりません。 Fn strtok_r は、別々のコンテキストポインタが使われている限りでは、 お互いの内部で 2 つのパースループを入れ子にするためにも使えます。

Fn strtok および Fn strtok_r 関数は、そのトークン自体を NUL 文字で置き換えた後、 文字列の次のトークンの先頭へのポインタを返します。 トークンがなくなると、NULL ポインタを返します。  

索引

次の例では、別々のコンテキストを使って 2 つの文字列を パースするために Fn 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)  

索引

規格

Fn strtok 関数は、 St -isoC に適合しています。  

索引

バグ

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

索引

作者

An Wes Peters , Softweyr LLC: Aq wes@softweyr.com

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


 

索引

Index

名称
ライブラリ
書式
解説
関連項目
規格
バグ
作者

jman



Time: 07:07:10 GMT, January 12, 2009