鸟语天空
通用工具:stdlib.h
post by:追风剑情 2020-4-26 20:34

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

常用的NSDictionary方法
stdlib.h中声明的类型
类型 描述
size_t sizeof运算符返回的整数类型
wchar_t 用于表示宽字符的整数类型
div_t div()返回的结构类型,该类型中的quot和rem成员都是int类型
ldiv_t ldiv()返回的结构类型,该类型中的quot和rem成员都是long类型
lldiv_t lldiv()返回的结构类型,该类型中的quot和rem成员都是long long类型(C99)
stdlib.h中定义的常量
NULL 空指针(相当于0)
EXIT_FAILURE 可用作exit()的参数,表示执行程序失败
EXIT_SUCCESS 可用作exit()的参数,表示成功执行程序
RAND_MAX rand()返回的最大值(一个整数)
MB_CUR_MAX 当前本地化的扩展字符集中多字节字符的最大字节数
stdlib.h中的函数原型
double atof(const char * nptr) 返回把字符串nptr开始部分的数字(和符号)字符转换为 double类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0
int atoi(const char *nptr) 返回把字符串nptr开始部分的数字(和符号)字符转换为int类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0
int atol(const char *nptr) 返回把字符串nptr开始部分的数字(和符号)字符转换为1ong类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0
double strtod(const char* restrict npt, char ** restrict ept) 返回把字符串npt开始部分的数字(和符号)符转换为 double类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第1个字符的地址赋给ept指向的位置;如果转换失败,则把npt赋给ept指向的位置
float strtof(const char* restrict npt, char ** restrict ept) 与 strtod()类似,但是该函数把npt指向的字符串转换为 float类型的值(C99)
long double strtols(const char * restrict npt, char ** restrict ept) 与 strtod类似,但是该函数把npt指向的字符串转换成long double类型的值(99)
long strtol(const char * restrict npt, char ** restrict ept, int base) 返回把字符串npt开始部分的数字(和符号)字符转换成long类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第1个字符的地址赋给ept指向的位置;如果转换失败,则把npt赋给ept指向的位置;假定字符串中的数字以base指定的数为基数
long long strtoll(const char * restrict npt, 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类型的值,跳过开始的空白,遇到第1个非数字字符时结束转换;如果未发现数字则返回0;如果转换成功,则把数字后第1个字符的地址赋给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~ RANDMAX范围内的一个伪随机整数
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()返回的值,或者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指向的字符传递给命处理器(如Dos或UNX)执行的主机环境,如果str是NULL指针,且命令处理器可用,则该函数返回非0,否则返回0;如果atr不是NULL,回值依实现而异
void *bsearch(const void *key, const void *base, size_t nmem, 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。如果第1个参数指向的对象小于数组元素,那么比较函数将返回小于0的值;如果两者相等,则回0;如果第1个参数指向的对象大于数组元素,则返回大于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成员和em成员中,对于无法整除的除法,商要趋零截断(即直接截去小数部分)(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 mbstowcs(wchar_t *restrict pwcs, const char *restrict s, size_t n)
把s指向的多字节字符数组转换成储存在pwcs开始位置的宽字符编码数组中,转换pwcs数组中的n个字符或转换到s数组的空字节停止。如果遇到无效的多字节字符,该函数返回(size_t)(-1);,否则返回已填充的数组元素个数(如果有空字符,不包含空字符)
size_t wcstombs(char * restrict s, const wchart_t * restrict pwcs, size_t n) 把储存在pwcs指向数组中的宽字符编码序列转换成一个多字节字符序列,并把它拷贝到s指向的位置上,储存n个字节或遇到空字符时停止转换。如果遇到无效的宽字符编码,该函数返回(size_t)(-1),否则返回已填充数组的字节数(如果有空字符,不包含空字符)

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容