stdlib.h
提供标准库函数。
类型
size_t
,为sizeof
的返回值,是unsigned long long
的别名。div_t
,为div
函数的返回值。ldiv_t
,为ldiv
函数的返回值。
宏
NULL
,表示空指针,值为0LL
。EXIT_FAILURE
,exit
函数失败时的返回值,值为-1。EXIT_SUCCESS
,exit
函数成功时的返回值,值为0。RAND_MAX
,rand
返回的最大值。MB_CUR_MAX
,多字符集中最大字符数。
函数
转换函数
double atof(const char *str)
将字符串转换为双精度浮点,转换失败则返回 0.0
。
1 | char str[] = "114.514"; |
int atoi(const char *str)
将字符串转换为整形,转换失败则返回 0
。
1 | char str[] = "114514"; |
long atol(const char *str)
将字符串转换为长整型,转换失败则返回 0
。
1 | char str[] = "114514"; |
double strtod(const char *str, char** endptr)
尝试将字符串前尽可能多的位转换为双精度浮点数,并将指向不可转换部分首位的指针存入 endptr
,转换失败则返回 0
。
1 | char str[] = "114.514Hello"; |
long int strtol(const char *str, char **endptr, int base)
尝试将字符串前尽可能多的位按 base
进制转换为长整型,并将指向不可转换部分首位的指针存入 endptr
,转换失败则返回 0
。
1 | char str[] = "1E2D3CHello"; |
unsigned long int strtoul(const char *str, char **endptr, int base)
尝试将字符串前尽可能多的位按 base
进制转换为无符号长整型,并将指向不可转换部分首位的指针存入 endptr
,转换失败则返回 0
。
1 | char str[] = "1E2D3CHello"; |
内存管理
void* calloc(size_t num, size_t size)
申请 num
个连续大小为 size
的内存区段,总大小为 num * size
Byte,返回指向这个区段的指针。
1 | int* huge_array = (int*)calloc(114, sizeof(int)); |
void* malloc(size_t size)
申请大小为 size
Byte的内存区域,总大小为 num * size
Byte,返回指向这个区域的指针。
1 | char* huge_str = (char*)malloc(10086 * sizeof(char)); |
void* realloc(void* address, size_t newsize)
将已申请的内存 address
重新分配,新大小为 newsize
Byte,返回指向新区域的指针。
1 | int* resized_array = (int*)realloc(huge_array,514 * sizeof(int)); |
void free(void *ptr)
释放使用 calloc
、malloc
或 realloc
申请的内存。
系统函数
void abort(void)
立即使程序异常终止,并在系统允许的情况下生成一个核心转储文件。
int atexit(void (*func)(void))
在程序正常终止时调用相应函数,不包括异常终止。
1 |
|
void exit(int status)
使程序以指定状态正常终止,一般使用宏 EXIT_FAILURE
和 EXIT_SUCCESS
指定状态。
1 |
|
char *getenv(const char *name)
返回 name
名称对应的环境变量的值。
1 | puts(getenv("Path")); |
int system(const char *string)
将指令交给操作系统的命令行执行,返回执行状态,出现错误则返回-1。
1 | system("echo HelloWorld"); |
数组操作
void *bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void*, const void*))
在数组 base
中使用二分查找寻找与 key
指向的数据匹配的值,返回指向该数据的指针,未找到则返回 NULL
。
nmemb
为数组大小。
size
为数组元素的大小,key
与base
必须为同一类型。
compar
为比较方法,函数会以这个函数的返回值为比较相等的依据,传入的函数必须具有int (const void *a, const void *b)
签名,int (void*, void*)
亦可。
1 |
|
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void*, const void*))
对数组 base
进行快速排序。
nmemb
为数组大小。
size
为数组元素的大小。
compar
为比较方法,函数会以这个函数的返回值为比较大小的依据,传入的函数必须具有int (const void*, const void*)
签名,int (void*, void*)
亦可。
1 |
|
数学函数
int abs(int x)
&long labs(long x)
返回 x
的绝对值。
div_t div(int numer, int denom)
&ldiv_t ldiv(long int numer, long int denom)
返回 number
除以 denom
的结果,分别用 div_t
和 ldiv_t
表示,二者定义如下:
1 |
|
其中 quot
为商, rem
为余数,在除数或被除数小于0时向0舍入。
int rand(void)
返回一个介于0和 RAND_MAX
之间的伪随机数,常搭配 srand
使用。
void srand(unsigned int seed)
设置 rand
使用的随机数发生器的种子,一般使用当前时间戳作为种子。
1 |
|