在 C 语言中,#include <stdlib.h>
是一条预处理指令,用于引入标准库头文件 stdlib.h
。这个头文件包含了许多通用的函数和宏定义,这些函数和宏定义执行各种通用的任务,如内存分配、程序控制、类型转换、随机数生成等。
以下是 stdlib.h
中定义的一些常用函数:
-
内存分配和管理:
malloc(size_t size)
:分配一块指定大小的内存区域。calloc(size_t num, size_t size)
:分配一块内存用于保存数组,并初始化为0。realloc(void *ptr, size_t newsize)
:更改先前分配的内存块的大小。free(void *ptr)
:释放先前分配的内存。
-
程序控制:
exit(int status)
:终止当前程序的执行,并返回一个状态码。abort(void)
:异常终止当前程序。
-
类型转换:
atoi(const char *str)
:将字符串转换为整数。atol(const char *str)
:将字符串转换为长整数。atof(const char *str)
:将字符串转换为双精度浮点数。
-
随机数生成:
rand(void)
:生成一个伪随机数。srand(unsigned int seed)
:设置随机数生成器的种子。
-
字符串转换:
strtol(const char *str, char **endptr, int base)
:将字符串转换为长整数。strtod(const char *str, char **endptr)
:将字符串转换为双精度浮点数。
-
动态内存分配:
alloca(size_t size)
:分配一块自动存储的内存区域。
-
其他实用函数:
system(const char *command)
:执行一个shell命令。bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *))
:在已排序的数组中进行二分查找。qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *))
:对数组进行快速排序。
使用 stdlib.h
中的函数时,需要包含这个头文件,以便编译器知道这些函数和宏的定义。例如:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *my_int = malloc(sizeof(int));
if (my_int == NULL) {
fprintf(stderr, "Memory allocation failed.\n");
exit(EXIT_FAILURE);
}
*my_int = 10;
printf("The value is: %d\n", *my_int);
free(my_int);
return 0;
}
在这个例子中,我们使用 malloc
分配了一个整数的内存,并在使用后释放了它。
stdlib.h
头文件中包含了许多不常用的函数,这些函数在特定的场合或较少使用的编程任务中可能会用到。以下是一些不常用但仍然有用的函数:
-
abs(int i)
:计算整数的绝对值。 -
labs(long int i)
:计算长整数的绝对值。 -
llabs(long long int i)
:计算长长整数的绝对值。 -
div(int numerator, int denominator)
:执行整数除法并返回商和余数。 -
ldiv(long int numerator, long int denominator)
:执行长整数除法并返回商和余数。 -
lldiv(long long int numerator, long long int denominator)
:执行长长整数除法并返回商和余数。 -
ecvt(double value, int ndigit, int *decpt, int *sign)
:将浮点数转换为字符串。 -
fcvt(double value, int ndigit, int *decpt, int *sign)
:将浮点数转换为固定小数点字符串。 -
gcvt(double value, int ndigit, char *buf)
:将浮点数转换为字符串。 -
mblen(const char *s, size_t n)
:确定多字节字符的长度。 -
mbtowc(wchar_t *pwc, const char *s, size_t n)
:将多字节字符转换为宽字符。 -
wctomb(char *s, wchar_t wchar)
:将宽字符转换为多字节字符。 -
rand_r(unsigned int *seedp)
:使用种子生成伪随机数。 -
srand(unsigned int seed)
:设置随机数生成器的种子。 -
getenv(const char *name)
:获取环境变量的值。 -
system(const char *command)
:执行一个shell命令。 -
mktemp(char *template)
:生成一个唯一的文件名。 -
mkstemp(char *template)
:生成一个唯一的文件名并打开该文件。 -
mkstemps(char *template, int suffixlen)
:生成一个唯一的文件名并打开该文件,带有随机后缀。 -
ptsname(int fd)
:从文件描述符获取伪终端的名称。 -
grantpt(int fd)
:允许伪终端的控制。 -
unlockpt(int fd)
:解锁伪终端。 -
getsubopt(int *optionp, char *const *tokens, char **valuep)
:解析带选项的字符串。 -
realpath(const char *path, char *resolved_path)
:将相对路径转换为绝对路径。 -
canonicalize_file_name(const char *name)
:将文件名规范化。 -
setkey(char *key)
:设置随机数生成器的关键字。 -
jrand48(unsigned short int xsubi[3])
:生成随机数。 -
lrand48(void)
:生成随机数。 -
mrand48(void)
:生成随机数。 -
srand48(long int seed)
:设置随机数生成器的种子。
这些函数在特定的应用程序或系统编程中可能会有用,但在日常编程中使用较少。了解这些函数的存在可以在遇到特定问题时提供更多的解决方案选项。