C 编程/stdlib.h
外观
< C 编程
stdlib.h 是 C 编程语言的通用标准库的头文件,其中包含涉及内存分配、进程控制、转换和其他功能的函数。它与 C++ 兼容,在 C++ 中被称为 cstdlib
。名称 "stdlib" 代表 "标准库"。
stdlib.h
的成员可以分为以下几类:转换、内存、进程控制、排序和搜索、数学。
名称 | 描述 |
---|---|
类型转换 | |
atof |
字符串到双精度浮点数 (非浮点数) |
atoi |
字符串到整数 |
atol |
字符串到长整数 |
strtod |
字符串到双精度浮点数 |
strtol |
字符串到长整数 |
strtoul |
字符串到无符号长整数 |
strtoll |
字符串到长长整数 |
strtoull |
字符串到无符号长长整数 |
伪随机序列生成 | |
int rand(void) |
生成一个伪随机数 |
int random(void) |
生成一个伪随机数(非标准 C;由 POSIX 提供) |
void srand(unsigned int seed) |
设置 rand() 伪随机数生成器的种子 [常见惯例使用 time() 作为种子] |
void srandom(unsigned int seed) |
设置 random() 伪随机数生成器的种子 [常见惯例使用 time() 作为种子](非标准 C;由 POSIX 提供) |
内存分配和释放 | |
malloc calloc realloc |
从堆分配内存 |
free |
将内存释放回堆 |
进程控制 | |
/abort/ |
异常终止执行 |
atexit |
注册程序退出时的回调函数 |
exit |
终止程序执行 |
getenv |
检索环境变量 |
system |
执行外部命令 |
排序、搜索和比较 | |
bsearch |
在数组中进行二分搜索 |
qsort |
对数组进行排序 |
数学 | |
int abs(int) |
整数的绝对值。 |
long int labs(long int) |
长整数的绝对值。 |
div |
整数除法(返回商和余数) |
ldiv |
长整数除法(返回商和余数) |
多字节/宽字符 | |
mblen |
多字节字符的大小 [1] |
mbtowc, wctomb, mbstowcs, wcstombs |
多字节和宽字符转换 [2] |
stdlib.h
和 stddef.h
头文件定义了宏 NULL
,它产生一个空指针常量,表示一个指针值,该值保证不会指向内存中的有效地址。
NULL 可以定义为等于 int 零、长整型零或零强制转换为 void 指针的常量表达式
#define NULL 0
#define NULL 0L
#define NULL ((void *) 0)
虽然空指针常量在 C 中始终由符号常量 0 或强制转换为 void 指针的 0 表示,但这种指针的实际位表示是系统特定的,并且可能包含 1 位。
size_t 定义应通过包含此头文件提供给引用代码。实际上,大多数实现并没有在该文件中明确定义它,而是包含文件 stddef.h,例如,GNU C 编译器的标准库就是这样做的。对于应用程序代码,直接包含 stddef.h 绝对有效,因此在不需要或不希望使用该文件中的其他成员时,可以替换 stdlib.h。整个头文件设计符合例如 C99 ISO/ANSI 标准定义。 [3]
还定义了两个不太常用的数据类型 div_t
和 ldiv_t
。它们是 div 和 ldiv 函数的返回值类型。标准将它们定义为
typedef struct {
int quot, rem;
} div_t;
typedef struct {
long int quot, rem;
} ldiv_t;
/itoa/ 是一个常见函数,包含在许多 stdlib.h 的实现中,但标准没有定义该函数。虽然可以通过标准中定义的 sprintf 达到相同的结果,但直接调用 itoa
比通过 sprintf
调用它(或等效函数)的开销要小得多。
- stdio.h
- C 标准库
- wchar_t(宽字符)
- div (C)(除法函数)
- ↑ C++ 资源网络 - stdlib.h 2009 年 12 月 15 日访问
- ↑ C++ 资源网络 - stdlib.h 2009 年 12 月 15 日访问
- ↑ http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf 第 7.20 章
- cplusplus.com 上的 stdlib.h 摘要,2006 年 2 月访问。
- 为什么 size_t 很重要,2016 年 5 月访问。