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 にすすむ