前へ | 次へ | 目次 | 索引 |
null で終了する文字列の中の,特定の文字の最後のオカレンスのアドレスを返します。終端の null 文字は,文字列の一部と見なされます。
#include <string.h>関数バリアント strrchr関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strrchr32と _strrchr64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strrchr (const char *str, int character);
str
null で終了する文字列へのポインタ。character
int型のオブジェクト。
strchrを参照してください。
x 指定された文字の最後のオカレンスのアドレス。 NULL 文字が文字列に含まれていないことを示します。
文字列を分割します。
#include <string.h>関数バリアント strsep関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strsep32と _strsep64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strsep (char **stringp, char *delim);
stringp
文字列へのポインタへのポインタ。delim
区切り文字として使用する文字を含んでいる文字列へのポインタ。
strsep関数は,stringp の中で, delim に含まれる任意の文字 (または終端の '\0' 文字) の最初のオカレンスを探し,それを '\0' に置き換えます。区切り文字 ( または文字列の終端に達した場合は NULL) の次の文字の位置が stringp 引数に格納されます。 stringp 引数の元の値が返されます。区切り文字が 2 つ隣接していたときに生じる「空」のフィールドは, stringp 引数に返されたポインタが参照している位置を '\0' と比較することで検出できます。
stringp 引数が初期状態で NULL だった場合, strsepは NULL を返します。
x stringp がポイントする文字列のアドレス。 NULL stringp が NULL であることを示します。
次の例は, strsepを使用して,空白で区切られたトークンを含んでいる文字列を解析し,引数のベクトルに格納します。
char **ap, **argv[10], *inputstring; for (ap = argv; (*ap = strsep(&inputstring, " \t")) != NULL;) if (**ap != '\0') ++ap;
文字列の,文字のセットに含まれている文字のみから構成される接頭辞の長さを返します。
#include <string.h>size_t strspn (const char *str, const char *charset);
str
文字列へのポインタ。この文字列が null 文字列だった場合には,0 が返されます。charset
関数が検索の対象とする文字を含んでいる文字列へのポインタ。
strspn関数は,文字列の中の文字をスキャンし, charset に含まれていない文字を検出した時点で停止し, charset に含まれている文字から構成される文字列の最初のセグメントの長さを返します。
x セグメントの長さ。
s1 がポイントしている文字列の中での, s2 がポイントしている文字列に含まれる文字のシーケンスの最初のオカレンスを探します。
#include <string.h>関数バリアント strstr関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strstr32と _strstr64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。char *strstr (const char *s1, const char *s2);
s1, s2
文字列へのポインタ。
ポインタ 発見された文字列へのポインタ。 NULL 文字列が発見されなかったことを示します。
#include <stdlib.h> #include <stdio.h> #include <string.h> main() { static char lookin[]="that this is a test was at the end"; putchar('\n'); printf("String: %s\n", &lookin[0] ); putchar('\n'); printf("Addr: %s\n", &lookin[0] ); printf("this: %s\n", strstr( &lookin[0] ,"this") ); printf("that: %s\n", strstr( &lookin[0] , "that" ) ); printf("NULL: %s\n", strstr( &lookin[0], "" ) ); printf("was: %s\n", strstr( &lookin[0], "was" ) ); printf("at: %s\n", strstr( &lookin[0], "at" ) ); printf("the end: %s\n", strstr( &lookin[0], "the end") ); putchar('\n'); exit(0); }
この例は,次の結果を生成します。
$ RUN STRSTR_EXAMPLE String: that this is a test was at the end Addr: that this is a test was at the end this: this is a test was at the end that: that this is a test was at the end NULL: that this is a test was at the end was: was at the end at: at this is a test was at the end the end: the end $ |
指定された文字列を倍精度の数値に変換します。
#include <stdlib.h>関数バリアント strtod関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtod32と _strtod64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。double strtod (const char *nptr, char **endptr);
nptr
倍精度の数値に変換する文字列へのポインタ。endptr
関数が,スキャンを終了させた最初の認識不可能な文字のアドレスを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。
strtod関数は,オプションとして空白文字 ( isspaceの定義に従う) のシーケンスを,さらにオプションのプラスまたはマイナス記号を,さらにオプションとして基数文字を含んだ数字のシーケンスを,さらにオプションの文字 (e または E) を,最後にオプションの符号付きの整数を認識します。最初の認識不可能な文字が現れた時点で,変換は終了します。文字列は,浮動小数点定数を解釈するときに使用されるのと同じ規則によって解釈されます。
基数文字は,プログラムの現在のロケール (カテゴリ LC_NUMERIC) によって定義されます。
この関数は,変換後の値を返します。 strtodでは,オーバフローは次のように処理されます。
- 正しい値がオーバフローを引き起こす場合には, ( 値の符号に従ってプラスまたはマイナス記号が付いた ) HUGE_VAL が返され, errnoは ERANGE に設定される。
- 正しい値がアンダフローを引き起こす場合には,0 が返され, errnoは EINVAL に設定される。
文字列が認識不可能な文字から始まっている場合には,変換は実行されない。 *entptr は nptr に設定され,0 の値が返され, errnoは EINVAL に設定される。
x 変換された文字列。 0 変換が実行できなかったことを示します。 errno は以下のいずれかに設定されます。
- EINVAL - 変換は実行できなかった。
- ERANGE - 値はアンダフローを引き起こす。
- ENOMEM - 内部変換バッファ用のメモリが足りなかった。
±HUGE_VAL オーバフローが発生しました。 errno は ERANGE に設定されます。
文字列をトークンに分解します。
#include <string.h>関数バリアント strtok関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtok32と _strtok64という名前のバリアントを持っています。同様に, strtok_r関数には, _strtok_r32と _strtok_r64というバリアントがあります。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。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 $
ASCII 文字の文字列を,適切な数値に変換します。
#include <stdlib.h>関数バリアント strtol関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strtol32と _strtol64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.10 節を参照してください。long int strtol (const char *nptr, char **endptr, int base);
nptr
longに変換する文字列へのポインタ。endptr
関数が,変換プロセスの中で検出した最初の認識不可能な文字 ( つまり,変換された文字列の中の最後の文字の直後の文字 ) へのポインタを格納できるオブジェクトのアドレス。 endptr が NULL ポインタである場合,最初の認識不可能な文字のアドレスは保存されません。base
変換の底として使用する 2〜36 の値。
strtol関数は,底の値に応じて,さまざまな形式の文字列を認識します。この関数は,指定された文字列の中の先頭の空白文字 ( <ctype.h>の isspaceの定義に従う ) はすべて無視します。オプションのプラスまたはマイナス記号を認識した後に,底の値に応じて整定数を表現する数字または文字のシーケンスを認識します。最初の認識不可能な文字が,変換を終了させます。オプションの符号の後の先頭のゼロは無視され,底が 16 の場合には 0x と 0X も無視されます。
base が 0 の場合,文字のシーケンスは,整定数を解釈するのに使用されるのと同じ規則によって解釈されます。オプションの符号の後の先頭の 0 は 8 進変換を,先頭の 0x または 0X は 16 進変換を,その他の組み合わせは 10 進変換を示します。
代入の後,または明示的なキャストには ( 算術例外が生じる場合でも ) longから intへの切り捨てが起こることがあります。関数呼び出し atol(str)は, strtol (str, (char**)NULL, 10)と等価です。
x 変換された値。 LONG_MAX または LONG_MIN 変換された値がオーバフローを引き起こすことを示します。 0 文字列が認識不可能な文字から始まっている,または base の値が無効であることを示します。文字列が認識不可能な文字から始まっている場合, * endptr は nptr に設定されます。
前へ | 次へ | 目次 | 索引 |