bstdlib.h
にもどるbsyslog.h
にすすむbstring.h
標準的な C 言語の <string.h>
,
<memory.h>
に相当する関数ライブラリである。
ここで言う文字コードは 2 bytes のTRON文字コード (TC) ではなく、1 byte の文字コードである。
#define NULL ((void *)0)
|
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 個のメモリブロックの内容が一致しているか否かを返す。
メモリの内容を与えられたポインタを先頭として
s1
と s2
を 1 バイトごと
len
バイトになるまで比較してゆく。s1 と s2 で異なる文字が見つかった場合、
文字テーブル ( 処理系の実装ごとで定めている ) での順番を比較し、
その大小でリターン値を決定する。
memcmp()
の比較対象は文字列ではなく、領域である。
従って、途中で null
文字があっても制御は呼び出し側に返らない。
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()
と以下の点で異なる。
strcmp()
はメモリ領域ではなく文字列を比較するので、
null
文字を検出した時点で止まる。
memcmp()
は 2 つの void
型へのポインタを取るが strcmp()
は 2 つの char
型へのポインタを取る。
memcmp(), strncmp()
|
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()
|
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()
|
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()
|
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()
|
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
文字を付加する。
src
が len
バイトより短い場合には null
文字まで含めて src
が指す文字列を dest
に付加する。
dest
は、
連結後の文字列が保持できるサイズをあらかじめ用意しておかなければならない。
dest
の最後を越えて書き込んでしまった場合の動作と、
src
及び dest
が重複していた場合の動作は未定義である。
strcpy(),strcat()
|
void* memmove(void *dest, const void *src, size_t len)
void *dest 移動先 const void *src 移動元 size_t len 移動するサイズ
= dest 移動先文字列へのポインタ
dest
で指定するメモリブロックに src
で指定するアドレスから len
バイトの内容をコピーする。
memcpy()
と異なり、
dest
と src
が重なっている場合でも、
重複部分が悪影響を及ぼさない。
文字列コピールーチン strcpy()
、strncpy()
と異なり、
文字列 src
の途中に null
文字があってもコピーしつづける。
dest
と src
の指す領域が重複している場合でも正しい結果となる。
memcpy()
|
void* memcpy(void *dest, const void *src, size_t len)
void *dest コピー先 const void *src コピー元 size_t len コピーするサイズ
= dest 移動先文字列へのポインタ
dest
で指定するアドレスに
src
で指定するアドレスから
len
バイトの内容をコピーする。
dest
と src
の指す領域が重複している場合の結果は未定義。
dest
で指定するメモリブロックに src
で指定するアドレスから len
バイトの内容をコピーする。
文字列コピールーチン strcpy()
、
strncpy()
と異なり、文字列 src
の途中に null
文字があってもコピーしつづける。
memmove()
と異なり、
dest
と src
が重なっている場合、
重複部分が破壊される場合がある。
strcpy(),memmove()
|
char* strcpy(char *dest, const char *src)
char *dest コピー先の文字列へのポインタ const char *src コピー元の文字列へのポインタ
= dest 移動先文字列へのポインタ
dest
で指す領域に src
で指す文字列を
null
文字まで含めてコピーする。
dest
の指すメモリ領域が src
で指す文字列と重複している場合、strcpy()
の動作は未定義である。
memcpy(),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
バイトコピーするか、
src
に null
文字が検出された時点でコピーを終了する。
src
の長さが len
バイトより小さい場合、 strncpy
は len
バイトに達するまで dest
に null
文字をパディングする。
dest
の指すメモリ領域が src
で指す文字列と重複している場合、strncpy()
の動作は未定義である。
memcpy(),strcpy()
|
char* strdup(const char *src)
const char *src コピー元の文字列へのポインタ
≠ NULL コピー先の文字列へのポインタ = NULL メモリ獲得エラー
src
で指す文字列を複製して、複製した文字列のポインタを
リターン値として戻す。
null
文字まで含めて複製する。
複製するメモリ領域は malloc()
関数により獲得されるため、
呼び出し側では、不要になった時点で、得られたメモリ領域を free()
関数で解放する必要がある。
strcpy(), strncpy()
|
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
をリターン値
として戻す。
dest
と src
の指す領域が重複している場合の結果は
未定義。
memcpy()
|
void* memset(void *mem, int ch, size_t len)
void *mem 初期化領域へのポインタ int ch セットする値 size_t len 初期化するサイズ
= mem 初期化した領域へのポインタ
mem
が指す領域の先頭から len
バイトを ch
で埋める。
ch
は unsigned char
にキャストされる。
確保されている領域 mem
を越えて書き込みが行われた場合の動作は未定義である。
memcpy()
|
size_t strlen(const char *str)
const char *str 文字列
≧0 文字列長(null は除く)
str
で指定した文字列の長さを返す。
strlen()
は str
で指された文字列を null
文字に行き着くまで文字数を数え、null
文字を除いた
str
中のバイト数を返す。
|
char* strerror(int error)
int error エラー番号
≠ NULL エラー番号に対応するメッセージ文字列へのポインタ
指定したエラー番号に対応するエラーメッセージを返す。
エラー番号及びエラーメッセージは処理系の実装に依存する。
リターン値の指す文字配列は、次回の strerror
関数の呼出で上書きする場合を除いてプログラムで変更してはならない。
これは文字列リテラルの変更の動作が未定義であるためである。
全てのライブラリ関数は変更を避けるため strerror
関数を呼び出すことがないかのような定義がされている。
|
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()
|
char* strchr(const char *str, int ch)
const char *str 検索対象の文字列へのポインタ int ch 探す文字
≠ NULL ch の存在位置(ポインタ) = NULL 該当文字なし
指定文字列の先頭から対象の文字を検索し、発見したらそのポインタを返す。
strchr()
は memchr()
と異なり
null
文字で検索を終了する。
null
文字も検索の対象となる。
memchr(),strrchr()
|
char* strrchr(const char *str, int ch)
const char *str 検索対象の文字列 int ch 探す文字
≠ NULL ch の存在位置(ポインタ) = NULL 該当文字なし
指定文字列の末尾から対象の文字を検索し、発見したらそのポインタを返す。
strchr()
は str
先頭で検索を終了する。
null
文字も検索の対象となる。
memchr(),strchr()
|
size_t strcspn(const char *s1, const char *s2)
const char *s1 検索対象の文字列 const char *s2 対象としない文字の列(集合)
≧0 文字数
s1
の文字列内で s2
に含まれない文字からなる最初の部分文字列の長さの文字数をリターン値として戻す。
strspn()
|
size_t strspn(const char *s1, const char *s2)
const char *s1 検索対象の文字列 const char *s2 対象とする文字の列(集合)
≧0 文字数
s1
の文字列内で s2
に含まれる文字からなる最初の部分文字列の長さの文字数をリターン値として戻す。
strcspn()
|
char* strpbrk(const char *s1, const char *s2)
const char *s1 検索対象の文字列 const char *s2 対象とする文字の列(集合)
≠ NULL 対象文字の位置(ポインタ) = NULL 該当文字なし
s1
の文字列内で s2
に含まれる文字が最初に見つかった位置(ポインタ)をリターン値として戻す。
見つからなかった場合は、NULL
を戻す。
strchr()
|
char* strstr(const char *s1, const char *s2)
const char *s1 検索対象の文字列 const char *s2 対象の文字列
≠ NULL 見つかった s2 の位置(ポインタ) = NULL 該当文字列なし
s1
の文字列内で s2
の文字列全体 (最後のnull
を除く)が最初に見つかった位置(ポインタ)をリターン値として戻す。
見つからなかった場合は、NULL
を戻す。
strchr()
|
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()
|
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()
|
int ffs(int i)
int i 検索対象の値
> 0 セットされた最初のビット位置(1〜) = 0 セットされたビットはない
i
の下位ビットから順に調べて、最初に 1 にセットされているビットのビット位置をリターン値として戻す。最下位ビットのビット位置を 1 とする。
すべてのビットが 0 の場合、リターン値として 0 を戻す。
なし
|
char* index(const char *str, int ch)
const char *str 検索対象の文字列へのポインタ int ch 探す文字
≠ NULL ch の存在位置(ポインタ) = NULL 該当文字なし
strchr(str, ch)
と等価である。
strchr()
|
char* rindex(const char *str, int ch)
const char *str 検索対象の文字列 int ch 探す文字
≠ NULL ch の存在位置(ポインタ) = NULL 該当文字なし
strrchr(str, ch)
と等価である。
strrchr()
|
void bzero(void *mem, size_t len)
void *mem クリアする領域へのポインタ size_t len 領域のサイズ
なし
指定領域を0で埋める。
memset(mem, 0, len)
と等価である。
memset()
|
void bcopy(const void *src, void *dest, size_t len)
const void *src コピー元 void *dest コピー先 size_t len コピーするサイズ
なし
memmove(dest, src, len)
と等価である。
memmove()
|
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()
bstdlib.h
にもどるbsyslog.h
にすすむ