Everything

strtok, strtok_r


トークン分割を行います。

[所属]

標準ライブラリ

[指定形式]

#include <string.h>

char __far * __far strtok(char __far *s1, const char __far *s2);(C90)

char __far * __far strtok(char __far * restrict s1, const char __far * restrict s2);(C99) 【V1.07以降】

char __far * __far strtok_r(char __far *s1, const char __far *s2, char __far * __far * tokpp);(C90)【V1.16 以降】

char __far * __far strtok_r(char __far * restrict s1, const char __far * restrict s2, char __far * __far * restrict tokpp);(C99)【V1.16 以降】

[戻り値]

トークンへのポインタを返します。トークンが存在しない場合は,nullポインタを返します。

[詳細説明]

s1の指す文字列を,s2の指す文字列中の文字で区切ることによって,トークンの列に分割します。これは最初に呼び出されると,最初の引数としてs1を持ち,その後はnullポインタを最初の引数とする呼び出しが続きます。s2の指す区切り文字列は,呼び出しごとに異なっていてもかまいません。

最初の呼び出しでは,s2の指す区切り文字列中に含まれない最初の文字を求めてs1の指す文字列中をサーチします。そのような文字が見つからなかった場合,nullポインタを返します。そのような文字が見つかった場合,その文字が最初のトークンの始まりとなります。

その後,そのときの区切り文字列に含まれる文字を求めてそこからサーチを行います。そのような文字が見つからなかった場合,そのときのトークンはs1の指す文字列の終わりまで拡張され,あとに続くサーチはnullポインタを返します。そのような文字が見つかった場合,その文字はトークンの終端を示すnull文字(\0)で上書きされます。strtok()は,あとに続く文字を指すポインタを静的変数にセーブします。strtok_r()は,それを第3引数tokppにセーブします。字句の次の探索はそこから開始されます。

第1実引数の値がnullポインタを持つ2回目以降の呼び出しでは,保持したポインタが指すところから探索が開始されます。このため,strtok()は,リエントラントでないコードになります。

[注意事項]

第2引数のnullポインタチェックはありません。第2引数にnullポインタが入力された場合,区切り文字無しとして扱われ,第1引数の値をそのままトークンとして返します。

strtok_r()では,第3引数のnullポインタチェックはありません。第3引数にnullポインタが入力された場合,正常な動作を保証できません。