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),否则返回已填充数组的字节数(如果有空字符,不包含空字符) |