本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > s

string(3C)

HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

文字列関数: strcasecmp(), strcat(), strchr(), strcmp(), strcoll(), strcpy(), strcspn(), strdup(), strlen(), strncasecmp(), strncat(), strncmp(), strncpy(), strpbrk(), strrchr(), strrstr(), strspn(), strstr(), strtok(), strtok_r(), strxfrm(), index(), rindex() ― 文字列操作

構文

#include <string.h> 
#include <strings.h> 
 
char *strcat(char *s1, const char *s2); 
 
char *strncat(char *s1, const char *s2, size_t n); 
 
int strcmp(const char *s1, const char *s2); 
 
int strncmp(const char *s1, const char *s2, size_t n); 
 
int strcasecmp(const char *s1, const char *s2); 
 
int strncasecmp(const char *s1, const char *s2, size_t n); 
 
char *strcpy(char *s1, const char *s2); 
 
char *strncpy(char *s1, const char *s2, size_t n); 
 
char *strdup(const char *s); 
 
size_t strlen(const char *s); 
 
char *strchr(const char *s, int c); 
 
char *strrchr(const char *s, int c); 
 
char *strpbrk(const char *s1, const char *s2); 
 
size_t strspn(const char *s1, const char *s2); 
 
size_t strcspn(const char *s1, const char *s2); 
 
char *strstr(const char *s1, const char *s2); 
 
char *strrstr(const char *s1, const char *s2); 
 
char *strtok(char *s1, const char *s2); 
 
char *strtok_r(char *s1, const char *s2, char **last); 
 
int strcoll(const char *s1, const char *s2); 
 
size_t strxfrm(char *s1, const char *s2, size_t n); 
 
char *index(const char *s, int c); 
 
char *rindex(const char *s, int c); 

index()rindex() を除くすべての関数は、両方のヘッダーファイルで宣言されているので、 2 つのヘッダーファイルのうち 1 つだけをインクルードすればいいことになります。

関数 index()rindex() は、 <strings.h> と <strings.h> にだけ宣言されています。 これらの関数は、BSD 系のアプリケーションの移植性のため で、移植性を重要視する新しいアプリケーション にはお勧めできません。 移植可能なアプリケーションには、 <string.h>, strchr() および strrchr() を代わりに使ってください。

説明

引き数 s1, s2, および s は、文字列 (null で終る文字の配列) を指します。

これらすべての関数、型 size_t、 および定数 NULL は、ヘッダーファイル <string.h> に定義されています。

strcat()  

文字列 s2 を文字列 s1 の末尾に連結します。 strncat() は、文字列 s2 を文字列 s1 の末尾に最大 n 文字連結します。 s2n 文字より短い場合、そのまま連結します。 どちらの関数も null で終了する連結後の結果 s1 の値) を指すポインターを返します。

strcmp()  

文字列の引き数を比較して、文字コードの大小関係を比較しながら s1s2 より小さいか、等しいか、大きいかによって、負の整数、0、正の整数を返します。 対応する文字の比較は、文字の型があたかも unsigned char であるかのように行われます。 s1s2 に対する null ポインターは、空の文字列へのポインターと同じに扱われます。 strncmp() は、同様の比較を行いますが、最大 n 文字 (0 以下の n では等しい動作は行わない) の比較を行います。 strcasecmp()strcmp() と、 strncasecmp()strncmp() と機能についてそれぞれ同様ですが、文字は、比較に先立って _tolower() conv(3C) を参照) によって変換されます。 返される大小関係には、小文字への変換が反映されます。

strcpy()  

文字列 s2 を文字列 s1 に null までコピーします。 strncpy() は、ちょうど n 文字をコピーし、必要なら n 文字全部が書かれるまで、 s2 を切り詰めたり、 s1 に null を加えます。 s2 が、 n 以上の場合、 s1 は、null で終了しません。 どちらの関数も s1 を返します。 strncpy() を任意の構造体の n バイトのコピーに使わないよう注意してください。 その構造体の中に null があると、 strncpy() は、ソースから宛先へ、 n バイト未満をコピーし、残りを null で満たします。 memcpy() 関数 memory(3C) を参照) を使って任意のバイナリデータをコピーしてください。

strdup()  

s1 が指す文字列のコピーである新しい文字列を指すポインターを返します。 新しい文字列の領域は、 malloc() 関数 malloc(3C) を参照) を使って確保します。

strlen()  

末尾の null を除いた s の文字数を返します。

strchr()  

(strrchr()) 文字列 s 中の最初 (最後) に文字 c が現れる位置へのポインターを返します。 また、 c が文字列中にないときは、null ポインターを返します。 文字列の末尾にある null は、文字列の一部として扱われます。 index() (rindex()) は strchr() (strrchr()) と同じもので、BSD 系のアプリケーションへの移植性のみ備わっています。

strpbrk()  

文字列 s1 内に文字列 s2 内の任意の文字が現れる最初の位置へのポインターを返します。 また、 s2 内の文字が s1 内にないときは、null ポインターを返します。

strspn()  

(strcspn()) 文字列 s1 内で、文字列 s2 内の文字 (文字列 s2 にない文字) だけからなる最大の先頭セグメントの長さを返します。

strstr()  

(strrstr()) 文字列 s1 内に文字列 s2 が最初 (最後) に現れる位置へのポインターを返します。 また、文字列中に s2 がなければ、NULL ポインターを返します。 s2 が大きさ 0 の文字列を指すとき、 strstr() (strrstr()) は s1 を返します。

strtok()  

文字列 s1 を、分離された文字列 s2 内の 1 つ以上の文字で区切られた 0 以上のテキストトークンの連なりからなるものとみなします。 最初の (null でないポインター s1 を指定しての) 呼び出しで、最初のトークンの先頭の文字を指すポインターを返し、そのトークンに続いて s1 に null を書き込みます。 個々の呼び出しで、文字列 s1 でのテキストトークンの位置を見失わないので、以降の、最初の引き数を null ポインターにする呼び出しが、続く文字列に行われます。 このようにして、トークンが 1 つもなくなるまで、個々の呼び出しが文字列 s1 に行われます。分離された文字列 s2 は、呼び出しが違っていても構いません。 s1 にトークンが 1 つもなくなると、null ポインターが返されます。

strtok_r()  

strtok() と同じですが、3 番目の引き数として文字列ポインターのアドレスが渡される点が異なります。 この引き数を使って、検索対象の文字列内の現在の位置を追跡します。 ポインターを文字列内の現在のトークンに返すか、トークンが存在しない場合はヌル値を返します。

strcoll()  

s1 が指す文字列が、 s2 が指す文字列に対して大きいか、等しいか、小さいかによって、正の整数、0、負の整数を返します。 比較は、プログラムの locale (以下の「ロケール」を参照) に適するように解釈された文字列に基づいています。 ``C'' の locale では、 strcoll() は、 strcmp() と同様に働きます。

strxfrm()  

s2 が指す文字列を変換し、その結果の文字列を s1 が指す配列に格納します。 この変換は、 strcmp() 関数を変換された 2 つの文字列に用いる場合、変換前の 2 つの文字列に strcoll() 関数を適用し、その結果に応じて正、0、負の値を返すようになっています。 終端にある null 文字を含んで、 n バイトしか出力文字列には格納されません。 変換後の文字列が n バイト以下しかない場合、出力文字列の長さが返されます (終端にある null 文字は含まれていません)。 n バイト以上のとき、返す値は文字列 s1 が占めている (終端にある null 文字は含まれない) バイト数になり、配列の内容は、確定しません。

指定した文字列が 2、3 回しか他の文字列と比較されない場合や、比較する文字列が長いけれど、相対的な順序を決める文字列中の違いが通常、最初の 2、3 文字で決まってしまう場合には、 strcoll() が、 strxfrm() より優れた性能を持っています。 strxfrm() は、たとえば、多くの文字列がそれぞれ一度だけ変換され、変換後の文字列が互いに何度も比較し合うようなソートルーチンに対して優れた働きを行います。

多言語化対応

ロケール

LC_CTYPE カテゴリは、 strcoll() および strxfrm() 関数に対する文字列引き数中のバイトの解釈を、半角文字または全角文字、あるいはその両方として決定します。 また strcasecmp() および strncasecmp() 関数に対して、大文字小文字変換を行うことを決定します。

LC_COLLATE カテゴリは、 strcoll() および strxfrm() 関数で使われる照合順序を決定します。

サポートされる国際的コードセット

シングル/マルチバイトの文字コードセットは、 strcoll() および strxfrm() 関数に対してサポートされています。 他のすべての関数は、シングルバイト文字コードセットのみをサポートしています。

以下のサンプルコードは、ブランクで区切られている、 文字列 s 中のトークンを見つけるものです (トークンの最大数は MAXTOK とします)。

int i = 0;
char *s, *last, *tok[MAXTOK];
tok[0] = strtok_r(s, " ", &last);
while (tok[++i] = strtok_r(NULL, " ", &last));

警告

関数 strcat(), strncat(), strcpy(), strncpy(), strtok(), および strtok_r() は、 s1 が指す配列の内容を変更します。 これらの関数は、配列のオーバーフローをチェックしません。

宛先の文字列の null ポインターは、不定の動作を引き起こします。

文字の移動は、インプリメンテーションに依存しています。重複したソースと宛先の文字列の間の移動などでは、予測できないことが起こり得ます。

8 ビットコードセットを使う言語に対して strxfrm() によって生成された変換後の文字列は、通常、元の文字列の少なくとも 2 倍の大きさで、4 倍の大きさにもなり得ます (通常の文字は、変換後の文字列中で 2 バイトを占め、1 対 2 の文字は 4 バイト、2 対 1 の文字は 2 バイト、関係のない文字は 0 バイトを占めます)。 全角コード設定のそれぞれの文字 (アジアの言語) は、変換後の文字列で、3 バイトを占めます。

LC_COLLATE カテゴリと LC_CTYPE カテゴリが指定する言語が異なるコードセットを使う場合、 関数 strcoll() および strxfrm() に対しては結果は定義されません。

また、 strtok_r() の使用に際して、 この関数のプロトタイプは、新しいリリースでは POSIX の新しいスレッド基準に準拠するように、変更されることに注意してください。

著者

string() は、カリフォルニア大学バークレイ校、AT&T、OSF、および HP で開発されました。

標準準拠

strcat(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strchr(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strcmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strcoll(): AES, SVID3, XPG3, XPG4, ANSI C

strcpy(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strcspn(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strdup(): SVID2, SVID3

strlen(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strncat(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strncmp(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strncpy(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strpbrk(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strrchr(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strspn(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strstr(): AES, SVID3, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strtok(): AES, SVID2, SVID3, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1, ANSI C

strxfrm(): AES, SVID3, XPG3, XPG4, ANSI C

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.