この章の目次にもどる
前頁:1.8 bstdlib.hにもどる
次頁:1.10 bsyslog.h にすすむ

1.9 bstring.h

標準的な C 言語の <string.h>, <memory.h> に相当する関数ライブラリである。
ここで言う文字コードは 2 bytes のTRON文字コード (TC) ではなく、1 byte の文字コードである。

□ 空ポインタ

#define NULL    ((void *)0)
memcmp
 
メモリ内容の比較

【形式】

int memcmp(const void *s1, const void *s2, size_t len)

【パラメータ】

const void  *s1, *s2    比較するメモリブロックへのポインタ
size_t      len         比較するサイズ

【リターン値】

= 0  内容が一致した
> 0   最初に異なった文字を見ると s1 側が s2 側より大きい
< 0 最初に異なった文字を見ると s1 側が s2 側より小さい

【解説】

2 個のメモリブロックの内容が一致しているか否かを返す。 メモリの内容を与えられたポインタを先頭として s1s2 を 1 バイトごと len バイトになるまで比較してゆく。s1 と s2 で異なる文字が見つかった場合、 文字テーブル ( 処理系の実装ごとで定めている ) での順番を比較し、 その大小でリターン値を決定する。

memcmp() の比較対象は文字列ではなく、領域である。 従って、途中で null 文字があっても制御は呼び出し側に返らない。

【参照】

strcmp()

strcmp
 
文字列の比較

【形式】

int strcmp(const char *s1, const char *s2)

【パラメータ】

const void  *s1, *s2    比較する文字列へのポインタ

【リターン値】

= 0   内容が一致した
> 0  最初に異なった文字を見ると s1 側が s2 側より大きい
< 0  最初に異なった文字を見ると s1 側が s2 側より小さい

【解説】

2 個の文字列の内容が一致しているか否かを返す。

strcmp() は 2 個の文字列が異なるまで 1 文字ずつ比較する。 s1 のある文字が s2 の対応する文字よりも大きい ( 文字コード表で後ろにある ) 場合には正の値を返す。 文字列の最後まで同じコードしか見つからなかった場合には、 文字列が等しいとみなす。

strcmp()memcmp() と以下の点で異なる。

  1. strcmp() はメモリ領域ではなく文字列を比較するので、 null 文字を検出した時点で止まる。
  2. memcmp() は 2 つの void 型へのポインタを取るが strcmp() は 2 つの char 型へのポインタを取る。

【参照】

memcmp(), strncmp()
strncmp
 
文字列の比較(2)

【形式】

int strncmp(const char *s1, const char *s2, size_t len)

【パラメータ】

const char *s1, *s2     比較する文字列へのポインタ
size_t          len     比較する文字数

【リターン値】

= 0  内容が一致した
> 0  最初に異なった文字を見ると s1 側が s2 側より大きい
< 0  最初に異なった文字を見ると s1 側が s2 側より小さい

【解説】

2 個の文字列の len バイト分の内容が一致しているか否かを返す。

strncmp() 2 個の文字列が異なるまで 1 文字ずつ len バイトになるまで比較する。 s1 のある文字が s2 の対応する文字よりも大きい ( 文字コード表で後ろにある ) 場合には正の値を返す。比較は len バイトを比較するか、 どちらかの文字列で null 文字を検出した段階で終了する。 null 文字は strncmp() が終わる前に比較される。 比較の最後まで同じコードしか見つからなかった場合には、文字列が等しいとみなす。

【参照】

strcmp()

strcasecmp
 
文字列の比較(大文字小文字を同一視)

【形式】

int strcasecmp(const char *s1, const char *s2)

【パラメータ】

const void  *s1, *s2    比較する文字列へのポインタ

【リターン値】

= 0  内容が一致した
> 0  最初に異なった文字を見ると s1 側が s2 側より大きい
< 0  最初に異なった文字を見ると s1 側が s2 側より小さい

【解説】

strcmp() と大文字(Upper Case)と小文字(lower Case)を同一視して比較する点を除いて同じ。

【参照】

strcmp(), strncmp(), strncasecmp()

strncasecmp
 
文字列の比較(2)(大文字小文字を同一視)

【形式】

int strncasecmp(const char *s1, const char *s2, size_t len)

【パラメータ】

const char *s1, *s2     比較する文字列へのポインタ
size_t          len     比較する文字数

【リターン値】

= 0  内容が一致した
> 0  最初に異なった文字を見ると s1 側が s2 側より大きい
< 0  最初に異なった文字を見ると s1 側が s2 側より小さい

【解説】

strncmp() と大文字(Upper Case)と小文字(lower Case)を同一視して比較する点を除いて同じ。

【参照】

strcmp(), strncmp(), strcasecmp()

strcat
 
文字列連結

【形式】

char*   strcat(char *dest, const char *src)

【パラメータ】

char    *dest       連結先文字列へのポインタ
char    *src        追加文字列へのポインタ

【リターン値】

= dest       連結先文字列へのポインタ

【解説】

dest で指定した文字列の最後に src を連結する。

src 末尾の null 文字まで含めた全文字を dest の指す文字列の最後にコピーする。 引数 dest の末尾の null 文字には src の最初の文字を重ねてコピーする。

destは、 連結後の文字列が保持できるサイズをあらかじめ用意しておかなければならない。

dest の最後を越えて書き込んでしまった場合の動作と、 src 及び dest が重複していた場合の結果は未定義である。

【参照】

strcpy(),strncat()

strncat
 
文字列連結

【形式】

char*   strncat(char *dest, const char *src, size_t len)

【パラメータ】

char    *dest   連結先の文字列へのポインタ
char    *src    連結する文字列へのポインタ
size_t  len     連結する文字数

【リターン値】

= dest       連結先文字列へのポインタ

【解説】

dest で指定した文字列の最後に src を先頭から len バイト分付加する。

src 末尾の null 文字まで含めた全文字を dest の指す文字列の最後にコピーする。

引数 dest の末尾の null 文字には src の最初の文字を重ねて len バイト分コピーし、最後に null 文字を付加する。 srclen バイトより短い場合には null 文字まで含めて src が指す文字列を dest に付加する。

dest は、 連結後の文字列が保持できるサイズをあらかじめ用意しておかなければならない。

dest の最後を越えて書き込んでしまった場合の動作と、 src 及び dest が重複していた場合の動作は未定義である。

【参照】

strcpy(),strcat()

memmove
 
メモリ内容の移動

【形式】

void*   memmove(void *dest, const void *src, size_t len)

【パラメータ】

void        *dest   移動先
const void  *src    移動元
size_t      len     移動するサイズ

【リターン値】

= dest       移動先文字列へのポインタ

【解説】

dest で指定するメモリブロックに src で指定するアドレスから len バイトの内容をコピーする。

memcpy() と異なり、 destsrc が重なっている場合でも、 重複部分が悪影響を及ぼさない。

文字列コピールーチン strcpy()strncpy() と異なり、 文字列 src の途中に null 文字があってもコピーしつづける。

destsrc の指す領域が重複している場合でも正しい結果となる。

【参照】

memcpy()

memcpy
 
メモリ内容のコピー

【形式】

void*   memcpy(void *dest, const void *src, size_t len)

【パラメータ】

void        *dest   コピー先
const void  *src    コピー元
size_t      len     コピーするサイズ

【リターン値】

= dest   移動先文字列へのポインタ

【解説】

dest で指定するアドレスに src で指定するアドレスから len バイトの内容をコピーする。

destsrc の指す領域が重複している場合の結果は未定義。

dest で指定するメモリブロックに src で指定するアドレスから len バイトの内容をコピーする。

文字列コピールーチン strcpy()strncpy() と異なり、文字列 src の途中に null 文字があってもコピーしつづける。

memmove() と異なり、 destsrc が重なっている場合、 重複部分が破壊される場合がある。

【参照】

strcpy(),memmove()

strcpy
 
文字列のコピー

【形式】

char*   strcpy(char *dest, const char *src)

【パラメータ】

char        *dest   コピー先の文字列へのポインタ
const char  *src    コピー元の文字列へのポインタ

【リターン値】

= dest       移動先文字列へのポインタ

【解説】

dest で指す領域に src で指す文字列を null 文字まで含めてコピーする。

dest の指すメモリ領域が src で指す文字列と重複している場合、strcpy() の動作は未定義である。

【参照】

memcpy(),strncpy()

strncpy
 
文字列のコピー

【形式】

char*   strncpy(char *dest, const char *src, size_t len)

【パラメータ】

char       *dest      コピー先の文字列へのポインタ
const char  *src      コピー元の文字列へのポインタ
size_t       len      コピーするサイズ

【リターン値】

= dest   移動先文字列へのポインタ

【解説】

dest で指す領域に src で指す文字列を len バイト分コピーして、null 文字を付加する。

len バイトコピーするか、 srcnull 文字が検出された時点でコピーを終了する。

src の長さが len バイトより小さい場合、 strncpylen バイトに達するまで destnull 文字をパディングする。

dest の指すメモリ領域が src で指す文字列と重複している場合、strncpy() の動作は未定義である。

【参照】

memcpy(),strcpy()

strdup
 
文字列の複製

【形式】

char*   strdup(const char *src)

【パラメータ】

const char  *src    コピー元の文字列へのポインタ

【リターン値】

≠ NULL    コピー先の文字列へのポインタ
= NULL    メモリ獲得エラー

【解説】

src で指す文字列を複製して、複製した文字列のポインタを リターン値として戻す。
null 文字まで含めて複製する。

複製するメモリ領域は malloc() 関数により獲得されるため、 呼び出し側では、不要になった時点で、得られたメモリ領域を free() 関数で解放する必要がある。

【参照】

strcpy(), strncpy()

memccpy
 
メモリ内容のコピー

【形式】

void*   memccpy(void *dest, const void *src, int c, size_t len)

【パラメータ】

void        *dest   コピー先
const void  *src    コピー元
int         c       コピー終端データ(バイト)
size_t      len     コピーするサイズ

【リターン値】

≠ NULL    dest 内のコピー終端データの次のバイトのポインタ
= NULL    src にコピー終端データは存在しなかった

【解説】

dest で指定するアドレスに src で指定するアドレスから cと一致するデータをコピーするか、 または最大lenバイトまでをコピーする。

cと一致するデータをコピーした場合、dest 内での cの次のバイトのポインタをリターン値として戻し、 cと一致するデータがなかった場合、nullをリターン値 として戻す。

destsrc の指す領域が重複している場合の結果は 未定義。

【参照】

memcpy()

memset
 
メモリ内容の初期化

【形式】

void*   memset(void *mem, int ch, size_t len)

【パラメータ】

void    *mem    初期化領域へのポインタ
int     ch      セットする値
size_t  len     初期化するサイズ

【リターン値】

= mem        初期化した領域へのポインタ

【解説】

mem が指す領域の先頭から len バイトを ch で埋める。

chunsigned char にキャストされる。

確保されている領域 mem を越えて書き込みが行われた場合の動作は未定義である。

【参照】

memcpy()

strlen
 
文字列の長さ

【形式】

size_t  strlen(const char *str)

【パラメータ】

const char  *str    文字列

【リターン値】

≧0 文字列長(null は除く)

【解説】

str で指定した文字列の長さを返す。

strlen()str で指された文字列を null 文字に行き着くまで文字数を数え、null 文字を除いた str 中のバイト数を返す。

【参照】

strerror
 
エラーメッセージの獲得

【形式】

char*   strerror(int error)

【パラメータ】

int error   エラー番号

【リターン値】

≠ NULL  エラー番号に対応するメッセージ文字列へのポインタ

【解説】

指定したエラー番号に対応するエラーメッセージを返す。

エラー番号及びエラーメッセージは処理系の実装に依存する。

リターン値の指す文字配列は、次回の strerror 関数の呼出で上書きする場合を除いてプログラムで変更してはならない。 これは文字列リテラルの変更の動作が未定義であるためである。 全てのライブラリ関数は変更を避けるため strerror 関数を呼び出すことがないかのような定義がされている。

【参照】

memchr
 
バイト検索

【形式】

void*   memchr(const void *mem, int ch, size_t len)

【パラメータ】

const void  *mem    検索対象メモリブロックへのポインタ
int           ch    探す文字
size_t       len    検索範囲

【リターン値】

≠ NULL   ch の存在位置(ポインタ)
= NULL   該当文字なし

【解説】

指定されたメモリブロック内から指定した値を検索し、そのポインタを返す。

memchr()strchr() と異なり null 文字を発見しても、制御は呼出側には戻らない。

【参照】

strchr()

strchr
 
文字列中の文字検索

【形式】

char*   strchr(const char *str, int ch)

【パラメータ】

const char  *str    検索対象の文字列へのポインタ
int         ch      探す文字

【リターン値】

≠ NULL   ch の存在位置(ポインタ)
= NULL   該当文字なし

【解説】

指定文字列の先頭から対象の文字を検索し、発見したらそのポインタを返す。

strchr()memchr() と異なり null 文字で検索を終了する。

null 文字も検索の対象となる。

【参照】

memchr(),strrchr()

strrchr
 
文字列中の文字検索

【形式】

char*   strrchr(const char *str, int ch)

【パラメータ】

const char  *str    検索対象の文字列
int         ch  探す文字

【リターン値】

≠ NULL   ch の存在位置(ポインタ)
= NULL   該当文字なし

【解説】

指定文字列の末尾から対象の文字を検索し、発見したらそのポインタを返す。

strchr()str 先頭で検索を終了する。

null 文字も検索の対象となる。

【参照】

memchr(),strchr()

strcspn
 
文字列中の特定文字列の長さ

【形式】

size_t	strcspn(const char *s1, const char *s2)

【パラメータ】

const char  *s1    検索対象の文字列
const char  *s2    対象としない文字の列(集合)

【リターン値】

≧0 文字数

【解説】

s1 の文字列内で s2に含まれない文字からなる最初の部分文字列の長さの文字数をリターン値として戻す。

【参照】

strspn()

strspn
 
文字列中の特定文字列の長さ

【形式】

size_t	strspn(const char *s1, const char *s2)

【パラメータ】

const char  *s1    検索対象の文字列
const char  *s2    対象とする文字の列(集合)

【リターン値】

≧0 文字数

【解説】

s1 の文字列内で s2に含まれる文字からなる最初の部分文字列の長さの文字数をリターン値として戻す。

【参照】

strcspn()

strpbrk
 
文字列中の文字検索

【形式】

char*	strpbrk(const char *s1, const char *s2)

【パラメータ】

const char  *s1    検索対象の文字列
const char  *s2    対象とする文字の列(集合)

【リターン値】

≠ NULL   対象文字の位置(ポインタ)
= NULL   該当文字なし

【解説】

s1 の文字列内で s2に含まれる文字が最初に見つかった位置(ポインタ)をリターン値として戻す。
見つからなかった場合は、NULLを戻す。

【参照】

strchr()

strstr
 
文字列中の文字列検索

【形式】

char*	strstr(const char *s1, const char *s2)

【パラメータ】

const char  *s1    検索対象の文字列
const char  *s2    対象の文字列

【リターン値】

≠ NULL   見つかった s2 の位置(ポインタ)
= NULL   該当文字列なし

【解説】

s1 の文字列内で s2 の文字列全体 (最後のnullを除く)が最初に見つかった位置(ポインタ)をリターン値として戻す。
見つからなかった場合は、NULLを戻す。

【参照】

strchr()

strtok
 
文字列をトークンに分解

【形式】

char*	strtok(char *s, const char *delm)

【パラメータ】

char  	    *s     対象の文字列
const char  *delm  トークンの区切り文字の列(集合)

【リターン値】

≠ NULL   トークンの先頭文字のポインタ
= NULL   トークンなし

【解説】

s の文字列を、delm に含まれる区切り文字により、 トークン文字列に分解して取り出す。
取り出したトークン文字列を NULL で終了させるために、 s 文字列内のトークンの直後の区切り文字の部分には NULL が書き込まれる。

最初の呼び出しでは、最初のトークンのポインタがリターン値として得られ、 その後は s = NULL に設定して呼び出すことにより、 順番にトークンのポインタを取り出すことができる。
呼び出しごとに、delm の内容を変更しても構わない。

【参照】

strpbrk(), strtok_r()

strtok_r
 
文字列をトークンに分解

【形式】

char*	strtok_r(char *s, const char *delim, char **last)

【パラメータ】

char  	    *s     対象の文字列
const char  *delm  トークンの区切り文字の列(集合)
char	    **last 対象文字列のポインタを格納する作業領域

【リターン値】

≠ NULL   トークンの先頭文字のポインタ
= NULL   トークンなし

【解説】

strtok() では、2 回目以降の呼び出しのために、 対象文字列のポインタを内部の作業領域に保持しているが、 strtok_r() では、last により、 作業領域を指定することにより、リエントラントな使用を可能にしている点が strtok() と異なる。

【参照】

strtok()

ffs
 
セットされた最初のビット位置の検索

【形式】

int	ffs(int i)

【パラメータ】

int	i	検索対象の値

【リターン値】

> 0  セットされた最初のビット位置(1〜)
= 0  セットされたビットはない

【解説】

i の下位ビットから順に調べて、最初に 1 にセットされているビットのビット位置をリターン値として戻す。最下位ビットのビット位置を 1 とする。
すべてのビットが 0 の場合、リターン値として 0 を戻す。

【参照】

なし

index
 
文字列中の文字検索

【形式】

char*	index(const char *str, int ch)

【パラメータ】

const char  *str    検索対象の文字列へのポインタ
int         ch      探す文字

【リターン値】

≠ NULL   ch の存在位置(ポインタ)
= NULL   該当文字なし

【解説】

strchr(str, ch) と等価である。

【参照】

strchr()

rindex
 
文字列中の文字検索

【形式】

char*	rindex(const char *str, int ch)

【パラメータ】

const char  *str    検索対象の文字列
int         ch	    探す文字

【リターン値】

≠ NULL    ch の存在位置(ポインタ)
= NULL    該当文字なし

【解説】

strrchr(str, ch) と等価である。

【参照】

strrchr()

bzero
 
メモリ領域の0クリア

【形式】

void bzero(void *mem, size_t len)

【パラメータ】

void    *mem    クリアする領域へのポインタ
size_t  len     領域のサイズ

【リターン値】

なし

【解説】

指定領域を0で埋める。

memset(mem, 0, len) と等価である。

【参照】

memset()

bcopy
 
メモリ内容のコピー

【形式】

void	bcopy(const void *src, void *dest, size_t len)

【パラメータ】

const void  *src    コピー元
void        *dest   コピー先
size_t      len     コピーするサイズ

【リターン値】

なし

【解説】

memmove(dest, src, len) と等価である。

【参照】

memmove()

bcmp
 
メモリ内容の比較

【形式】

int	bcmp(const void *s1, const void *s2, size_t len)

【パラメータ】

const void  *s1, *s2    比較するメモリブロックへのポインタ
size_t      len         比較するサイズ

【リターン値】

= 0   内容が一致した
≠ 0   内容が一致しない

【解説】

memcmp(s1, s2, len) とリターン値を除いて等価である。

【参照】

memcmp()


この章の目次にもどる
前頁:1.8 bstdlib.hにもどる
次頁:1.10 bsyslog.h にすすむ