bstdio.h
にもどるbstring.h
にすすむbstdlib.h
標準的な C 言語の <stdlib.h>
に相当する関数ライブラリである。
|
void exit(int status)
int status 終了ステータス(環境へ渡すエラーコード)
なし
プログラムを正常終了する。
abort
と異なり、
バッファのフラッシュ、ファイルのクローズ、
割り当てメモリの解放、などのルーチンを実行する。
呼び出し元には復帰しない。
abort()
|
void abort(void)
なし
なし
プログラムを即時終了する。
重大で回復不可能なトラブルが発生したとき、プログラムから抜け出すために使用する。
呼び出し元には復帰しない。
exit()
|
int atexit(void (*func)(void))
void (*func)(void) 登録する関数へのポインタ
= 0 関数の登録に成功した ≠ 0 関数の登録に失敗した
プログラムを終了する際に実行する関数を登録する。
登録した関数はプログラムが正常終了した場合に実行される。
つまり exit()
を呼ぶか
main()
が制御を返したときである。
その関数はプログラム終了の際の通常必要な処理以外にさらに必要な後始末をする。
atexit()
は最低 32 個 ( 個数は処理系の定義に依存する )
の関数を登録できる。実行順序は登録順序の逆順である。
abort()
|
int atoi(const char *str)
const char *str 変換対象文字列へのポインタ
整数値
str
で指定した文字列の先頭から 10
進数値を意味する部分までを int
型に変換した値を返す。
str
は符号が付く場合があり、
任意個の数字を含む。また文字列の始めにある空白を無視する。
最初の符号文字を除いて数字以外の文字を読み込んだ段階で走査を終了する。
変換結果が表現不能な文字列 str
が指定された場合の結果は未定義である。
atol()
|
long atol(const char *str)
const char *str 変換対象文字列へのポインタ
長整数値
str
で指定した文字列の先頭から 10
進数値を意味する部分までを long
型に変換した値を返す。
str
は符号が付く場合があり、
任意個の数字を含む。また文字列の始めにある空白を無視する。
最初の符号文字を除いて数字以外の文字を読み込んだ段階で走査を終了する。
変換結果が表現不能な文字列 str
が指定された場合の結果は未定義である。
atoi()
|
long strtol(const char *str, char **tail, int radix)
const char *str 変換対象文字列へのポインタ char **tail 解釈終了位置(アドレス)を格納するポインタ変数 int radix 基数
= 0 数値構成ができなかった = LONG_MAX 結果数値が表現範囲を超えた(最大値より大きい) = LONG_MIN 結果数値が表現範囲を超えた(最小値より小さい) その他 長整数値(変換結果)
str
が指す文字列により示された値を
long
に変換した結果の値を返す。
strtol()
は str
の指す文字列を読み込み、
開始部・本体・末尾部の 3 つの部分に分ける。
開始部は文字列先頭の空白文字類である。
本体は符号文字、数字または基数指定 radix
によって数字として読み込まれることになる文字から構成される。
NULL
文字を検出した時点、
または基数指定 radix
によって設定された数字以外の文字を検出した時点で本体は終了する。
末尾部は本体終了直後から NULL
文字までである。
strtol()
は開始部を無視し、
本体を long
型数値に変換し、
NULL
でない tail
に末尾部先頭へのポインタを格納する。
radix
が 0 の場合 8進定数 | "0177", "+077" |
10進定数 | "123", "-256" |
16進定数 | "0x1d8c", "0X2C7B" |
radix
が 1 の場合radix
が 2 〜 36 の場合radix
を基数とする英数字が有効となる。u,U,l,L
) は認識不能である。radix
が 16 の場合
[+/-][0x/0X][数字文字列]と記述しても良い。
strtoul()
|
unsigned long strtoul(const char *str, char **tail, int radix)
const char *str 変換対象文字列 char **tail 解釈終了時の文字を指すポインタ int radix 基数
= 0 数値構成ができなかった = LONG_MAX 結果数値が表現範囲を超えた(最大値より大きい) = LONG_MIN 結果数値が表現範囲を超えた(最小値より小さい) その他 長整数値
str
が指す文字列により示された値を
unsigned long
に変換した結果の値を返す。
strtol()
は str
の指す文字列を読み込み、
開始部・本体・末尾部の 3 つの部分に分ける。
開始部は文字列先頭の空白文字類である。
本体は符号文字、数字または基数指定 radix
によって数字として読み込まれることになる文字から構成される。
NULL
文字を検出した時点、
または基数指定 radix
によって設定された数字以外の文字を検出した時点で本体は終了する。
末尾部は本体終了直後から NULL
文字までである。
strtol()
は開始部を無視し、
本体を long
型数値に変換し、
NULL
でない tail
に末尾部先頭へのポインタを格納する。
整数文字列の形式については strtol()
を参照のこと。
strtol()
|
void* calloc(size_t nmemb, size_t size)
size_t nmemb 獲得する要素の数 size_t size 一つの要素のサイズ
= NULL メモリ領域獲得不能、または、nmemb, size のいずれかが 0 ≠ NULL 獲得メモリ領域へのポインタ
size
で指定したサイズのデータが nmemb
個格納できるメモリ領域を獲得する。
獲得した領域を 0 で初期化する。
nmemb
または size
が 0 の場合、calloc()
の動作は処理系に依存する。
つまり、calloc()
が NULL
を返すか一意に定めるポインタを返すかは処理系の実装に依存する。
malloc(), realloc()
|
void free(void *ptr)
void *ptr 解放メモリブロックへのポインタ
なし
calloc()
、malloc()
、
realloc()
で動的に割り当てたメモリブロックを解放する。
ポインタ ptr
は calloc
、
malloc()
、realloc()
で獲得したメモリブロックを指定したものであること。
解放されたメモリ領域は再びメモリ割当用に使用できる。
malloc(), realloc()
|
void* malloc(size_t size)
size_t size メモリブロックサイズ
= NULL エラー(メモリは割り当てられていない) ≠ NULL 割り当てられたメモリブロックへのポインタ
少なくとも size
バイトの大きさを持つメモリブロックを獲得する。
実際に割付られる大きさは size
バイト以上となり、その値は不確定である。
size = 0
の場合、
動作は処理系に依存する。
calloc()
と異なり、メモリブロック内を初期化しない。
calloc(), realloc(), malloctest()
|
void* realloc(void *ptr, size_t size)
void *ptr 変更前のメモリブロックへのポインタ size_t size メモリサイズ
= NULL エラー(メモリは割り当てられていない) ≠ NULL 割り当てられたメモリブロックへのポインタ
既に獲得したメモリブロックの内容を変えずにサイズを変更する。
サイズをより大きく指定した場合には、
アドレスが変わることがある。この場合、
ptr
は既に解放されているので使ってはいけない。
ptr
が NULL
の場合 malloc()
と同じ動作をする。
size
が 0 で ptr
が NULL
でない場合
ptr
の指すメモリブロックを解放する。
size
が 0 で ptr
が NULL
の場合の動作は処理系に依存する。
メモリが獲得できなかった場合には、ptr
の状態は変化しない。
malloc(), calloc()
|
void malloctest(int mode)
int mode デバッグのモード指定
なし
malloc
を使ってメモリを獲得したときのデバッグ用情報を得るためのモードを設定する。
mode = 0 通常モード mode = 1 デバッグモード mode = -1 使用状況ダンプ mode = -2 使用状況詳細ダンプ
malloc()
|
void * Scalloc(size_t nmemb, size_t size) void Sfree(void *ptr) void * Smalloc(size_t size) void * Srealloc(void *ptr, size_t size) void Smalloctest(int mode)
共有メモリを扱うという点以外では、
それぞれ calloc()
, free()
,
malloc()
, realloc()
, malloctest()
と同様の処理を行う。
同一プロセスの複数タスクから同時に使用した場合の動作は保証しない。
calloc, free(), malloc(), realloc(), malloctest()
|
int rand(void)
なし
0〜RAND_MAXの値
疑似乱数を返す。
RAND_MAX
は最低でも 32767 を保証する。
rand()
はシードを変更しない限り同じ乱数の系列を返す。
srand()
|
void srand(unsigned int seed)
unsigned int seed 初期値を設定するためのパラメータ
なし
rand()
で発生させる疑似乱数の種 seed
を設定する。
乱数の系列は種 seed
によって変化する。
同じ seed
では同じ疑似乱数列になる。
srand()
を最初に呼ばない場合はシードを 1
にセットしたことと同じ結果になる。
rand()
|
div_t div(int num, int den);
int num 分子 int den 分母
除算結果を div_t
型構造体で返す。
div_t
型構造体の定義は以下の通りである。
typedef struct { int quot, rem; /* quot は商、rem は剰余を返す */ } div_t;
分子 num
を分母 den
で割った、商と剰余を計算する。
商の符号は両引数の符号が等しければ正、
異なれば負である。剰余の符号は num
の符号と同じとする。
剰余が 0 以外であれば、
商は代表的な答えより小さい最大の整数と規定する。
この点でマシンの除算命令を実行するだけの演算子
/
や %
と異なる。
ldiv()
|
ldiv_t ldiv(long int num, long int den)
long int num 分子 long int den 分母
除算結果を ldiv_t
型構造体で返す。
div_t
型構造体の定義は以下の通りである。
typedef struct { long int quot, rem; /* quot は商、rem は剰余を返す */ } ldiv_t;
分子 num
を分母 den
で割った、
商と剰余を計算する。
商の符号は量引数の符号が等しければ正、
異なれば負である。剰余の符号は num
の符号と同じとする。
剰余が 0 以外であれば、商は代表的な答えより小さい最大の整数と規定する。
この点でマシンの除算命令を実行するだけの演算子 /
や %
と異なる。
div()
bstdio.h
にもどるbstring.h
にすすむ