C语言 通用工具库 stdlib.h

ANSI C在stdlib.h头文件中定义了一些实用函数。

stdlib.h中声明的类型
size_tsizeof运算符返回的整数类型
wchar_t用于表示宽字符的整数类型
div_tdiv()返回的结构类型,该类型中的quot和rem成员都是int类型
ldiv_tldiv()返回的结构类型,该类型中的quot和rem成员都是long类型
lldiv_tlldiv()返回的结构类型,该类型中的quot和rem成员都是long long 类型(C99)

stdlib.h中定义的常量
NULL空指针,相当于0
EXIT_FAILURE可用作exit()的参数,表示执行程序失败
EXIT_SUCCESS可用作exit()的参数,表示成功执行程序
RAND_MAXrand()返回的最大值,一个整数
MN_CUR_MAX当前本地化的拓展字符集中多字节字符的最大字节数

通用工具
double atof(const char * nptr);返回把字符串nptr开始部分的数字和符号字符转换为double类型的值,跳过开始的空白,遇到第一个非数字字符时结束转换;如果未发现数字则返回0
int atoi(const char * nptr);返回把字符串nptr开始部分的数字和符号字符转换为int类型的值,跳过开始的空白,遇到第一个非数字字符时结束转换;如果未发现数字则返回0
int atol(const char *nptr);返回把字符串nptr开始部分的数字和符号字符转换为long类型的值,跳过开始的空白,遇到第一个非数字字符时结束转换;如果未发现数字则返回0
double strtod(const char *restrictnpt, char ** restrictept);返回把字符串npt开始部分的数字和符号转换为double类型的值,跳过开始的空白遇到第一个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第一个字符的地址赋给ept指向的位置;如果转换失败,则把npt赋给ept指向的位置
float strtof(const char * restrictnpt, char ** restrict ept);与strtod()类似,但是该函数把npt指向的字符串转换成long double类型的值(C99)
long double strtols(const char * restrict npt, char **restrict ept);与strod()类似,但是该函数把npt指向的字符串转换成long double类型的值(C99)
long strtol(const char * restrict npt, char ** restrict ept, int base);返回把字符串npt开始部分的数字和符号转换成long类型的值,跳过开始的空白,遇到第一个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第一个字符的地址赋给ept指向的位置;如果转换失败,则把npt赋给ept指向的位置;假定字符串中的数字以base指定的数为基数
long long strtoll(const char *restrictnpt, char ** restrict ept, int base);与strtol()类似,但是该函数把npt指向的字符串转换为long long类型的值(C99)
unsigned long strtoul(const char * restrict npt, char ** restrict ept, int base);返回把字符串npt开始部分的数字和符号字符转换为unsigned long 类型的值,跳过开始的空白,遇到第一个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第一个字符的地址赋给ept指向的位置;如果转换失败,则把npt赋给ept指向的位置;假定字符串中的数字以base指定的数为基数
unsigned long long strtoull(const char * restrict npt, char ** restrict ept , int base);与strtoul()类似,但是该函数把npt指向的字符串转换为unsigned long long 类型的值(C99)
int rand(void);返回0 - RAND_MAX范围内的一个伪随机整数
void srand(unsigned int seed);把随机数生成器种子设置为seed,如果在调用rand()之前调用srand(),则种子为1
void *aligned_alloc(size_t algn, size_t size);为对其对象algn分配size字节的空间,应该支持algn对齐值,size应该是algn的倍数(c11)
void *calloc(size_t nmem, size_t size);为内含nmem个成员的数组分配空间,每个元素占size字节大;空间中的所有位都初始化为0;如果操作成功,该函数返回数组的地址,否则返回NULL
void free(void *ptr);释放ptr指向的空间,ptr应该是之前调用calloc(), malloc()或realloc(0返回的值,或者ptr也可以是空指针,出现这种情况时什么也不做。如果ptr是其他值,其行为是未定义的
void *malloc(size_t size);分配size字节的未初始化内存块;如果成功分配,该函数返回数组的地址,否则返回NULL
void *realloc(void *ptr, size_t size);把ptr指向的内存块大小改为size字节,size字节内的内存块内容不变。该函数返回块的位置,它可能被移动。如果不能重新分配空间,函数返回NULL,原始块不变;如果ptr为NULL,其行为与调用带size参数的malloc()相同;如果size是0,且ptr不是NULL,其行为与调用带ptr参数的free()相同。
void abort(void);除非捕获信号SIGABRT,且相应的信号处理器没有返回,否则该函数将导致程序异常结束。是否关闭I/O流和临时文件,因实现而异。该函数执行raise(SIGABRT)
int atexit(void (*func) (void));注册func指向的函数,使其在程序正常结束时被调用。实现应支持注册至少32个函数,并根据它们注册顺序的逆序调用。如果注册成功,函数返回0;否则返回非0
int at_quick_exit(void (*func) (void));注册func指向的函数,如果调用quick_exit()则调用被注册的函数。实现应支持注册至少32个函数,并根据它们注册顺序的逆序调用。如果注册成功,函数返回0;否则返回非0(C11)
void exit(int status);该函数将正常结束程序。首先调用由atexit()注册的函数,然后刷新所有打开的输出流,关闭所有的I/O流,关闭tmpfile()创建的所有文件,并把控制权返回主机环境中;如果status是0或EXIT_SUCCESS,则返回一个实现定义的值,表明未成功结束程序
void _Exit(int status);与exit()类似,但是该函数不调用atexit()注册的函数和signal()注册的信号处理器,其处理打开流的方式依照实现而异
char *getenv(const char * name);返回一个指向字符串的指针,该字符串表示name指向的环境变量的值。如果无法匹配指定的name,则返回NULL
_Noreturn void quick_exit(int status);该函数将正常结束程序。不调用atexit()注册的函数和signal()注册的信号处理器。根据at_quick_exit()注册函数的顺序,逆序调用这些函数。如果程序多次调用quick_exit()或者同时调用quick_exit()和exit(),其行为是未定义的。通过调用_Exit(status)将控制权返回主机环境(C11)
int system(const char *str);把str指向的字符串传递给命令处理器执行的主机环境。如果str是NULL指针,且命令处理器可用,则该函数返回非0,否则返回;如果str不是NULL,返回值依实现而异
void *bsearch(const void *key, const void *base, size_tnmem, size_t size, int (*comp)(const void *, const void *));查找base指向的一个数组(有nmem个元素,每个元素的大小为size)中是否有元素匹配key指向的对象。通过comp指向的函数比较各项,如果key指向的对象小于数组元素,那么比较函数将返回小于0的值;如果两者相等,则返回0;如果key指向的对象大于数组元素,则返回大于0的值。该函数返回指向匹配元素的指针或NULL(如果无匹配元素)。如果有多个元素匹配,未定义返回哪一个元素
void qsort(void *base, size_t nmem, size_t size, int(*comp) (const void *, const void *));根据comp指向的函数所提供的顺序排列base指向的数组。该数组有nmem个元素,每个元素的大小是size。如果第一个参数指向的对象小于数组元素,那么比较函数将返回小于0的值;如果两者相等,则返回0;如果第一个参数指向的对象大于数组元素,则返回大于0的值
int abs(int n);返回n的绝对值。如果n是负数但没有与之对应的正数,那么返回值是未定义的。当n是以二进制补码表示的INT_MIN时,会出现这种情况
div_t div(int number, int denom);计算number除以denom的商和余,把商和余数分别存储在div_t结构的quot成员和rem成员中。对于无法整除的除法,商要直接截去小数部分
long labs(int n);返回n的绝对值,如果n是负数但没有与之对应的正数,那么返回值是未定义的。当n是以二进制补码表示的LONG_MIN时,会出现这种情况
ldiv_t ldiv(long number, long denom);计算number除以denom的商和余,把商和余数分别存储在ldiv_t结构的quot成员和rem成员中。对于无法整除的除法,商要直接截去小数部分
long long llabs(int n);返回n的绝对值,如果n是负数但没有与之对应的正数,那么返回值是未定义的。当n是以二进制补码表示的LONG_LONG_MIN时,会出现这种情况
lldiv_t lldiv(long number, long denom);计算number除以denom的商和余,把商和余数分别存储在lldiv_t结构的quot成员和rem成员中。对于无法整除的除法,商要直接截去小数部分 (C99)
int mblen(const char *s, size_t n);返回组成s指向的多字节字符的字节数(最大为n)。如果s指向空字符,该函数则返回0;如果s未指向多字节字符,则返回-1;如果s是NULL,且多字节根据状态进行编码,该函数则返回非0,否则返回0
int mbtowc(wchar_t *pw, const char *s, size_t n);

如果s不是NULL,该函数确定了组成s指向的多字节字符的字节数(最大为n),并确定字符的wchar_t类型编码。如果pw不是NULL,则把类型编码赋给pw指向的位置。返回值与mblen(s, n)相同

int wctomb(char *s, wchar_t wc);把wc中的字符代码转换成相应的多字节字符表示,并将其存储在s指向的数组中,除非s是NULL。如果s不是NULL,且如果wc无法转换成相应的有效多字节字符,该函数返回-1;如果wc有效,该函数返回组成多字节的字节数;如果s是NULL,且如果多字节字符根据状态进行编码,该函数返回非0,否则返回0
size_t mbstwocs(wchar_t *restrict pwcs, const char *srestrict, size_t n);把s指向的多字节字符数组转换成存储在pwcs开始位置的宽字符编码数组中,转换pwcs数组中的n个字符或转换到s数组的空字节停止。如果遇到无效的多字节字符,该函数返回(size_t)(-1); 否则返回已填充的数组元素个数(如果有空字符,不包含空字符)
size_t wcstombs(char * restricts, const wchart_t *restrict pwcs, size_t n);把存储在pwcs指向数组中的宽字符编码序列转换成一个多字节字符序列,并把它拷贝到s指向的位置上,存储n个字节或遇到空字符时停止转换。如果遇到无效的宽字符编码,该函数返回(size_t)(-1), 否则返回已经填充数组的字节数(如果有空字符,不包含空字符)





  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值