头文件<stdlib.h>被发明的目的是为了定义和声明那些没有明显的归属地宏和函数。它声明了4中类型和几个具有一般功能的函数,还定义了几个宏
1、类型:
size_t 这是无符号整数类型,它是sizeof关键字的结果。
wchar_t 这是一个宽字符常量大小的整数类型。
div_t 这是div函数返回的结构。
ldiv_t 这是ldiv函数返回的结构。
2、宏:
NULL 这个宏是一个空指针常量的值。
EXIT_FAILURE 这是 exit 函数失败时要返回的值。
EXIT_SUCCESS 这是 exit 函数成功时要返回的值。
RAND_MAX 这个宏是 rand 函数返回的最大值。
MB_CUR_MAX 这个宏表示在多字节字符集中的最大字符数,不能大于 MB_LEN_MAX。
3、函数:
3.1字符转换函数
double atof(const char *nptr);
说明:把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
参数:nptr -- 要转换为浮点数的字符串。
返回值:函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
int atoi(const char *nptr);
说明:把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。
参数:nptr -- 要转换为整数的字符串。
返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
long int atol(const char *nptr);
说明:把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
参数:nptr -- 要转换为长整数的字符串。
返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
double strtod(const char *nptr,char **endptr);
说明:把参数 nptr 所指向的字符串转换为一个浮点数(类型为 double 型)。
参数:nptr -- 要转换为双精度浮点数的字符串。
endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 nptr 中数值后的下一个字符。
返回值:该函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
long int strtol(const char *nptr,char **endptr,int base);
说明:把参数 nptr 所指向的字符串转换为一个长整数(类型为 long int 型)。
参数:nptr -- 要转换为长整数的字符串。
endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 nptr 中数值后的下一个字符。
base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
返回值:该函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。
unsigned long int strtoul(const char *nptr,char **endptr,int base);
说明:把参数 nptr 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。
参数:nptr -- 要转换为无符号长整数的字符串。
endptr -- 对类型为 char* 的对象的引用,其值由函数设置为 nptr 中数值后的下一个字符。
base -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
返回值:
3.2伪随机序列产生函数
int rand(void);
说明:返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
返回值:该函数返回一个范围在 0 到 RAND_MAX 之间的整数值。
void srand(unsigned in seed);
说明:该函数播种由函数 rand 使用的随机数发生器。
参数:seed -- 这是一个整型值,用于伪随机数生成算法播种。
返回值:该函数不返回任何值。
3.3内存管理函数
void *calloc(size_t nmemb,size_t size);
说明:分配所需的内存空间,并返回一个指向它的指针。
参数:nmemb -- 要被分配的元素个数。
size -- 元素的大小。
返回值:该函数返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。
void free(void *ptr);
说明:释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
参数:ptr -- 指针指向一个要释放内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果传递的参数是一个空指针,则不会执行任何动作。
返回值:该函数不返回任何值。
void *malloc(size_t size);
说明:分配所需的内存空间,并返回一个指向它的指针。
参数:size -- 内存块的大小,以字节为单位。
返回值:该函数返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回 NULL。
void *realloc(void *ptr,size_t size);
说明:尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
参数:ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。
size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。
返回值:该函数返回一个指针 ,指向重新分配大小的内存。如果请求失败,则返回 NULL。
3.4环境通信函数
void abort(void);
说明:使一个异常程序终止。
返回值:该函数不返回任何值。
int atexit(void (*func)(void));
说明:当程序正常终止时,调用指定的函数 func。
参数:func -- 在程序终止时被调用的函数。
返回值:如果函数成功注册,则该函数返回零,否则返回一个非零值。
void exit(int status);
说明:使程序正常终止。
参数:status -- 返回给父进程的状态值。
返回值:该函数不返回值。
char *getenv(const char *name);
说明:搜索 name 所指向的环境字符串,并返回相关的值给字符串。
参数:name -- 包含被请求变量名称的 C 字符串。
返回值:该函数返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL。
int system(const char *string);
说明:由 string 指定的命令传给要被命令处理器执行的主机环境。
参数:string -- 包含被请求变量名称的 C 字符串。
返回值:如果发生错误,则返回值为 -1,否则返回命令的状态。
3.5查找和排序函数
void *bsearch(const void *key,const void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *));
说明:执行二分查找。
参数:key -- 指向要查找的元素的指针,类型转换为 void*。
base -- 指向进行查找的数组的第一个对象的指针,类型转换为 void*。
nmemb -- base 所指向的数组中元素的个数。
size -- 数组中每个元素的大小,以字节为单位。
compar -- 用来比较两个元素的函数。
返回值:如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。.
void qsort(void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *));
说明:数组排序。
参数:base -- 指向要排序的数组的第一个元素的指针。
nmemb -- 由 base 指向的数组中元素的个数。
size -- 数组中每个元素的大小,以字节为单位。
compar -- 用来比较两个元素的函数。
返回值:该函数不返回任何值。
3.6整数算数函数
int abs(int j);
说明:返回 j 的绝对值。
参数:j -- 完整的值。
返回值:该函数返回 j 的绝对值。
div_t div(int mmer,int denom);
说明:分子除以分母。
参数:mmer -- 分子。
denom -- 分母。
返回值:该函数返回定义在 <cstdlib> 中的结构中的值,该结构有两个成员,如 div_t:int quot; int rem;。
long int labs(long int j);
说明:返回 j 的绝对值
参数:j -- 完整的值。
返回值:该函数返回 j 的绝对值。
ldiv_t ldiv(long int numer,long int denom);
说明:分子除以分母。
参数:numer -- 分子。
denom -- 分母。
返回值:该函数返回定义在 <cstdlib> 中的结构中的值,该结构有两个成员,如 ldiv_t:long quot; long rem;。
3.7多字节字符函数
int mblen(const char *s,size_t n);
说明:返回参数 s 所指向的多字节字符的长度。
参数:s -- 指向多字节字符的第一个字节的指针。
n -- 要检查的字符长度的最大字节数。
返回值:如果识别了一个非空宽字符,mblen() 函数返回 s 开始的多字节序列解析的字节数。如果识别了一个空宽字符,则返回 0。如果识别了一个无效的多字节序列,或者不能解析一个完整的多字节字符,则返回 -1。
int mbtowc(wchar_t *pwc,const char *s,size_t n);
说明:检查参数 s 所指向的多字节字符。
参数:pwc -- 指向类型为 wchar_t 对象的指针。
s -- 指向多字节字符的第一个字节的指针。
n -- 要被检查的最大字节数。
返回值:如果 s 不为 NULL,mbtowc() 函数返回 str 开始消耗的字节数,如果指向一个空字节,则返回 0,如果操作失败,则返回 -1。
如果 s 为 NULL,如果编码具有移位状态,则 mbtowc() 函数返回非零,如果编码是无状态的,则返回零。
int wctomb(char *s,wchar_t wchar);
说明:检查对应于参数 wchar 所给出的多字节字符的编码。
参数:s -- 一个指针,指向一个足以存储多字节字符的数组。
wchar -- 类型为 wchar_t 的宽字符。
返回值:如果 s 不为 NULL,wctomb() 函数返回写入字节数组中的字节数。如果 wchar 不能被表示为一个多字节序列,则会返回 -1。
如果 s 为 NULL,如果编码具有移位状态,则 wctomb() 函数返回非零,如果编码是无状态的,则返回零。
3.8多字节串函数
size_t mbstowcs(wchar_t *pwcs,const char *s,size_t n);
说明:把参数 s 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。
参数:pwcs -- 指向一个 wchar_t 元素的数组,数组长度足以存储一个最大字符长度的宽字符串。
s -- 要被转换的多字节字符字符串。
n -- 要被转换的最大字符数。
返回值:该函数返回转换的字符数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。
size_t wcstombs(char *s,const wchar_t *pwcs,size_t n);
说明:把数组 pwcs 中存储的编码转换为多字节字符,并把它们存储在字符串 s 中。
参数:s -- 指向一个 char 元素的数组,至少有 n 字节长。
pwcs -- 要被转换的宽字符字符串。
n -- 要被写入到 s 中的最大字节数。
返回值:该函数返回转换和写入到 s 中的字节数,不包括结尾的空字符。如果遇到一个无效的多字节字符,则返回 -1 值。