C语言中的stdlib头文件解析

stdlib 头文件即standard library(标准库)头文件,里面包含了C、C++语言的最常用的系统函数。包括动态内存管理、随机数生成、与环境之间的通信、整数运算、搜索、排序及转换等。
stdlib .h 头文件定义了四个变量类型、五个宏和各种通用工具函数。

4个变量:

size_t
wchar_t(一个宽字符常量大小的整数类型)
div_t(div函数返回的结构)
ldiv_t(ldiv 函数返回的结构)。

5个宏:

NULL;
EXIT_FAILURE;   exit 函数失败时要返回的值
EXIT_SUCCESS;   exit 函数成功时要返回的值
RAND_MAX;       rand 函数返回的最大值;
MB_CUR_MAX  在多字节字符集中的最大字符数

一些主要的函数

•atof函数

函数原型:double atof (const char* str);
函数描述:把参数 str 所指向的字符串转换为一个浮点数。
函数返回:函数返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
特点:
1:函数会不理会字符串开始之后的空格,直到遇到第一个有效字符,从第一个有效字符开始,到最后一个有效字符为止,函数会将这段字符转换为浮点数。最后一个有效字符之后的字符不会影响该函数。
2:对于C90,有效字符包括以下条件:可以以+-字符作为字符串的开始;字符串中可以出现(不超过)一个.符;可以出现表示指数形式的E或e字符,且其后可以跟一个有效字符串。
3:对于C99/C11,除C90的条件外,还支持0x/0X前缀,INF,NAN等。

•atoi函数

函数原型:int atoi(const char *str);
函数描述:把参数 str 所指向的字符串转换为一个整数。
函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回零。
特点:
1:函数会忽略字符串刚开始的空格,直到遇到第一个有效字符。
2:+和-位于第一个字符是被认为是有效字符。最后一个有效字符之后的字符不会影响该函数。
3:若转换后的数据长度超出int所表示的最大范围,将产生未定义的行为。

•atol函数

函数原型:long int atol(const char *str);
函数描述:把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。
函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回零。
特点:与atoi一致。

•strtod函数

函数原型:double strtod(const char *str, char **endptr);
函数描述:把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。
函数返回:返回转换后的双精度浮点数,如果没有执行有效的转换,则返回零(0.0)。
特点:
1:函数会忽略字符串刚开始的空格,直到遇到第一个有效字符。
2:如果 endptr 不为空,则它指向转换中最后一个有效字符后的字符所在的地址。
3:实际使用中常将endptr设为null,表示不关注无效字符。

•strtol函数

函数原型:long int strtol(const char *str, char **endptr, int base);
函数描述:把参数 str 所指向的字符串根据给定的 base 转换为一个长整数,base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
函数返回:函数返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。
特点:
1.对于base,若base为0,则要求:首字母可以是(+/-),若首字母不是0或0x/0X,则必须是十进制的其他字符,且按照10进制进行转换;若首字母是0或0x/0X,则分别按照8进制或16进制转换,开始的0及x/X会被忽略,在此过程中,超出8进制和16进制的字符会被认为是无效字符(如0912会被转化为0,因为会按照8进制来转换,9被认为是无效字符)。
2:若为36进制,则为从0~z/Z。
3:其余特点参考strtod。

•strtoul函数

函数原型:unsigned long int strtoul(const char *str, char **endptr, int base);
函数描述:把参数 str 所指向的字符串根据给定的 base 转换为一个无符号长整数,base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
函数返回:返回转换后的长整数,如果没有执行有效的转换,则返回一个零值。
特点:参考strtol

•calloc函数

函数原型:void *calloc(size_t nitems, size_t size);
函数描述:分配所需的内存空间,并返回一个指向它的指针。nitems表示要被分配的元素个数。size表示每个元素的大小。
函数返回:返回一个指针,指向已分配的内存。如果请求失败,则返回 NULL。
特点:
1:malloc 和 calloc 之间的不同点是,malloc 不会设置内存为零,而 calloc 会设置分配的内存为零。

•free函数

函数原型:void free(void *ptr);
函数描述:释放之前调用 calloc、malloc 或 realloc 所分配的内存空间。
函数返回:不返回任何值。
特点:
1:如果传递的参数是一个空指针,则不会执行任何动作。
2:如果指针指向的内存不是由calloc、malloc 或 realloc 所分配,则函数会发生未定义的结果。
3:函数不会改变指针的值(指向),只是现在指向的内存区域无效。(Notice that this function does not change the value of ptr itself, hence it still points to the same (now invalid) location.)

•malloc函数

函数原型:void *malloc(size_t size);
函数描述:分配所需的内存空间,并返回一个指向它的指针。size表示要申请的字节数。
函数返回:返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回NULL。

•realloc函数

函数原型:void *realloc(void *ptr, size_t size) ;
函数描述:尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。
函数返回:返回一个指针 ,指向已分配大小的内存。如果请求失败,则返回NULL。
特点:
1:ptr指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针(类似malloc)。
2:新的内存块的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。
3:如果请求失败,则返回NULL,此时不影响ptr所指向的内存。

•abort函数

函数原型:void abort(void);
函数描述:异常中止程序执行,直接从调用的地方跳出。
函数返回:无返回。
特点:
1:abort函数导致所有的流被关闭和冲洗。
2:abort函数用以解除进程对SIGABRT信号的阻止。

•atexit函数

函数原型:int atexit(void (*func)(void)) ;
函数描述:当程序正常终止时,调用指定的函数func。
函数返回:如果函数成功注册,则该函数返回零,否则返回一个非零值。
特点:
1:可以在任何地方注册你的终止函数,但它会在程序终止的时候被调用。
2:若一个程序中出现多次atexit函数,则其按照栈的方式执行(最后一个先执行,以此类推)。

•exit函数

函数原型:void exit(int status);
函数描述:(正常)立即终止调用进程。status – 返回给父进程的状态值。
对于status,如果其为0或者EXIT_SUCCESS,表示成功;如果其为EXIT_FAILURE,表示失败。
函数返回:无返回。
特点:
1:任何属于该进程的打开的文件描述符都会被关闭,该进程的子进程由进程 1 继承,初始化,且会向父进程发送一个 SIGCHLD 信号。

•getenv函数

函数原型:char *getenv(const char *name);
函数描述:搜索name所指向的环境字符串,并返回相关的值给字符串。
函数返回:返回一个以 null 结尾的字符串,该字符串为被请求环境变量的值。如果该环境变量不存在,则返回 NULL。

•system函数

函数原型:int system(const char *command);
函数描述:把 command 指定的命令名称或程序名称传给要被命令处理器执行的主机环境,并在命令完成后返回。
函数返回:如果发生错误,则返回值为-1,否则返回命令的状态。
特点:
1:如果command为null,则只是为了测试指令系统是否有效,若有效,返回非0,否则返回0。

•bsearch函数

函数原型:void bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void , const void *));
函数描述:对 nitems 对象的数组执行二分查找,base 指向进行查找的数组,key 指向要查找的元素,size 指定数组中每个元素的大小。数组的内容应根据 compar 所对应的比较函数升序排序。
函数返回:如果查找成功,该函数返回一个指向数组中匹配元素的指针,否则返回空指针。
特点:
1:对于compar函数,若返回值小于0,表示要查找的值小于当前值;若返回值等于0,表示要查找的值等于当前值;若返回值大于0,表示要查找的值大于当前值。
2:若数组中有多个满足条件的值,则函数可能返回任意一个,不一定是第一个。
3:复杂度log2(num)+2。

•qsort函数

函数原型:void qsort(void base, size_t nitems, size_t size, int (*compar)(const void , const void*));
函数描述:对数组进行排序。base指向要排序的数组的第一个元素的指针。nitems 由 base 指向的数组中元素的个数。size数组中每个元素的大小,以字节为单位。compar 用来比较两个元素的函数。
返回值:无返回值。
特点:
1:不稳定排序(其实是基于快速排序的操作)。
2:复杂度num*log2(num)。

•abs函数与labs函数

函数原型:int abs(int x);long int abs(long int x);
函数描述:取x得绝对值。
函数返回:返回x的绝对值。
特点:
1:对于浮点型及负数的取绝对值,分别定义在头文件cmath.h及头问价complex.h中。

•div函数与ldiv函数

函数原型:div_t div(int numer, int denom); div_t div(long int numer, long int denom);
函数描述:把 numer(分子)除以 denom(分母)。
函数返回:返回定义在

rand函数

函数原型:int rand(void) ;
函数描述:伪随机数生成函数。
函数返回:返回一个范围在 0 到 RAND_MAX 之间的伪随机数。
特点:
1:RAND_MAX 是一个常量,它的默认值在不同的实现中会有所不同,但是值至少是 32767。
2:若随机数生成种子相同,则每次调用rand()生成的伪随机数是相同的。
3:若使用rand函数前没有调用srand函数,系统会自动调用srand函数。

•srand函数

函数原型:void srand(unsigned int seed);
函数描述:播种由函数rand使用的随机数发生器。seed是一个整型值,用于伪随机数生成算法播种。
函数返回:无返回。
特点:
1:不同的seed会使得此后调用rand函数生成不同的伪随机数。
2:如果seed设置为1,rand函数将生成和之前一样的伪随机序列。
3:为了保持seed的独特性,通常的做法是使用time函数返回作为seed值。如srand(time(&t));

此外,stdlib头文件还有一些处理多字节的函数,在使用过程中可自行查阅。

参考:

  1. http://www.runoob.com/cprogramming/c-standard-library-stdlib-h.html
  2. http://www.cplusplus.com/reference/cstdlib/
  • 32
    点赞
  • 175
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值