日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
strtok, strtok_r |
文字列をトークンに分解します。
#include <string.h>関数バリアント strtok関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtok32と _strtok64という名前のバリアントを持っています。同様に, strtok_r関数には, _strtok_r32と _strtok_r64というバリアントがあります。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9 節を参照してください。char *strtok (char *s1, const char *s2);
char *strtok_r (char *s, const char *sep, char **lasts);
s1
最初の呼び出しでは,ゼロ個以上のテキスト・トークンを含んでいる文字列へのポインタ。その文字列に対するそれ以降のすべての呼び出しでは,NULL ポインタ。s2
1 つまたは複数の文字から構成される区切り文字列へのポインタ。区切り文字列は呼び出しごとに異なっていても構いません。s
区切り文字列 sep の 1 個以上の文字で区切られた,ゼロ個以上のトークンのシーケンスである,null で終わる文字列。sep
区切り文字の,null で終わる文字列。この区切り文字列は,呼び出しごとに異なっても構いません。lasts
strtok_rが同じ文字列のスキャンを続けるために必要とする情報を格納するためのユーザ提供ポインタを指すポインタ。
strtok関数は,指定された文字列内で,テキスト・トークンを見つけます。テキスト・トークンは,ユーザが指定した区切り文字列内の 1 個以上の文字で区切られます。この関数は,呼び出し間をまたいで文字列内でのトークンの位置を把握しています。そして,呼び出しが連続して行われると,以前の呼び出して識別されたトークンの次のテキスト・トークンを識別して,文字列全体を処理します。s1 の中のトークンは,区切り文字列 s2 に含まれていない最初の文字から始まり,文字列の終端か,区切り文字の手前で終了します。
strtok関数の最初の呼び出しでは,最初のトークンに含まれている最初の文字へのポインタが返され, s1 の中の返されたトークンの直後に null 文字が書き込まれます。それ以降の (第 1 引数の値を NULL のままにした) 個々の呼び出しでは, s1 がもともとポイントしていた文字列の中の,その次のトークンへのポインタが返されます。文字列にトークンが残っていない場合, strtok関数は NULL ポインタを返します ( これは,文字列が空であるか,区切り文字のみを含んでいる場合には, strtokの最初の呼び出しでも起こります )。
strtokはトークンを区切るために s1 に null 文字を挿入するので, s1 は constオブジェクトであってはなりません。
strtok_r関数は, strtokのリエントラント・バージョンです。 strtok_r関数は, null で終了する文字列 s を,区切り文字列 sep 内の 1 個以上の文字で区切られた,ゼロ個以上のテキスト・トークンのシーケンスと見なします。 lasts 引数は,同じ文字列のスキャンを続けるために strtok_rが必要とする情報を格納するためのユーザ提供ポインタを指します。
strtok_rの 1 回目の呼び出しでは, s は null で終わる文字列を指し, sep は区切り文字の,null で終わる文字列を指し, lasts が指す値は無視されます。 strtok_r関数は, 1 番目のトークンの 1 番目の文字へのポインタを返し, s 内の,返したトークンの直後の位置に null 文字を書き込み, lasts が指しているポインタをアップデートします。
以降の呼び出しでは,呼び出すたびに文字列 s 上を移動するように, s は NULL ポインタとし, lasts は以前の呼び出しのままとします。残りのトークンがなくなるまで,次々とトークンが返されます。区切り文字列 sep は,呼び出しごとに異なっていても構いません。 s 内にトークンが残っていない場合は, NULL ポインタが返されます。
x 文字列内の,検出されたトークンの 1 文字目へのポインタです。 NULL 文字列内にトークンが残っていないことを示します。
#1 |
---|
#include <stdio.h> #include <string.h> main() { static char str[] = "...ab..cd,,ef.hi"; printf("|%s|\n", strtok(str, ".")); printf("|%s|\n", strtok(NULL, ",")); printf("|%s|\n", strtok(NULL, ",.")); printf("|%s|\n", strtok(NULL, ",.")); } |
この例のプログラムを実行すると,次の結果が出力されます。
$ RUN STRTOK_EXAMPLE1 |ab| |.cd| |ef| |hi| $
#2 |
---|
#include <stdio.h> #include <string.h> main() { char *ptr, string[30]; /* The first character not in the string "-" is "A". The */ /* token ends at "C. */ strcpy(string, "ABC"); ptr = strtok(string, "-"); printf("|%s|\n", ptr); /* Returns NULL because no characters not in separator */ /* string "-" were found (i.e. only separator characters */ /* were found) */ strcpy(string, "-"); ptr = strtok(string, "-"); if (ptr == NULL) printf("ptr is NULL\n"); } |
この例のプログラムを実行すると,次の結果が出力されます。
$ RUN STRTOK_EXAMPLE2 |abc| ptr is NULL $
目次 | 索引 |
|