<stdlib.h>
是 C 标准库中的另一个核心头文件,提供了一些常用的功能,包括内存分配、进程控制、转换功能、随机数生成等。它包含了多种实用的函数,用于处理程序执行过程中的各种任务。
📖 目录
1️⃣ <stdlib.h>
简介
<stdlib.h>
主要提供与程序执行、内存分配、随机数生成、字符到数值转换、进程控制等相关的功能。它是编写高效程序所必需的工具之一,几乎所有 C 程序都离不开这一库。
功能
- 内存动态分配和释放。
- 数字与字符串之间的转换。
- 随机数生成。
- 程序的终止与退出处理。
2️⃣ 常用函数
📌 内存管理函数
malloc
:分配指定大小的内存块。calloc
:分配指定数量的内存块,并初始化为零。realloc
:重新调整之前分配的内存块的大小。free
:释放先前分配的内存块。
📌 进程控制函数
exit
:终止程序并返回指定的退出状态。abort
:异常终止程序。atexit
:注册程序退出时调用的函数。
📌 转换函数
atoi
:将字符串转换为整数。atof
:将字符串转换为浮点数。strtol
:将字符串转换为长整数。strtod
:将字符串转换为双精度浮点数。
📌 随机数生成函数
rand
:生成一个随机整数。srand
:设置随机数种子。
📌 退出程序
exit
:正常或异常终止程序。abort
:强制终止程序。
3️⃣ 内存管理
📌 malloc
malloc
用于分配一块指定大小的内存空间,返回一个指向该内存块的指针。
原型:
void *malloc(size_t size);
- 参数:
size
:要分配的内存大小(以字节为单位)。 - 返回值:成功时返回指向内存块的指针,失败时返回
NULL
。
示例:
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
📌 calloc
calloc
用于分配一块内存,并初始化为零。
原型:
void *calloc(size_t num, size_t size);
- 参数:
num
:要分配的元素数量。size
:每个元素的大小(以字节为单位)。
- 返回值:成功时返回指向内存块的指针,失败时返回
NULL
。
📌 realloc
realloc
用于调整已分配内存块的大小,支持内存块的扩展或缩减。
原型:
void *realloc(void *ptr, size_t new_size);
- 参数:
ptr
:指向原内存块的指针。new_size
:新的内存大小。
- 返回值:返回一个新的指针,指向重新分配的内存块。如果内存分配失败,返回
NULL
。
示例:
arr = (int *)realloc(arr, 10 * sizeof(int)); // 扩展为 10 个整数
📌 free
free
用于释放先前分配的内存块。
原型:
void free(void *ptr);
- 参数:
ptr
:指向要释放的内存块的指针。
4️⃣ 进程控制
📌 exit
exit
用于终止程序的执行,并返回指定的退出状态。
原型:
void exit(int status);
- 参数:
status
:返回给操作系统的退出状态,0
表示正常终止,非0
表示异常终止。
示例:
if (error) {
exit(1); // 非正常退出
}
exit(0); // 正常退出
📌 abort
abort
用于强制程序异常终止,并生成一个核心转储文件。
原型:
void abort(void);
- 返回值:无返回值,程序会被立即终止。
📌 atexit
atexit
用于注册程序退出时调用的函数。
原型:
int atexit(void (*func)(void));
- 参数:
func
:指向退出时要调用的函数的指针。 - 返回值:成功时返回
0
,失败时返回非0
。
5️⃣ 转换函数
📌 atoi
atoi
用于将字符串转换为整数。
原型:
int atoi(const char *str);
- 参数:
str
:指向要转换的字符串。 - 返回值:转换后的整数。
📌 atof
atof
用于将字符串转换为浮点数。
原型:
double atof(const char *str);
- 参数:
str
:指向要转换的字符串。 - 返回值:转换后的浮点数。
📌 strtol
strtol
用于将字符串转换为长整型。
原型:
long strtol(const char *str, char **endptr, int base);
- 参数:
str
:指向要转换的字符串。endptr
:指向指针的指针,返回字符串的未处理部分。base
:数字的进制(如 10 为十进制,16 为十六进制等)。
- 返回值:转换后的长整型数值。
6️⃣ 随机数生成
📌 rand
rand
用于生成一个随机整数。
原型:
int rand(void);
- 返回值:生成的随机整数,范围从
0
到RAND_MAX
(通常是 32767)。
📌 srand
srand
用于设置 rand
函数的种子,影响随机数生成的结果。
原型:
void srand(unsigned int seed);
- 参数:
seed
:种子值。
示例:
srand(time(0)); // 使用当前时间作为种子
int r = rand(); // 生成随机数
7️⃣ 退出程序
📌 exit
exit
用于终止程序的执行,并返回指定的退出状态。
8️⃣ 示例代码
📌 示例:动态内存分配
该示例展示了如何使用 malloc
动态分配内存并使用它。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 5;
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
for (int i = 0; i < n; i++) {
arr[i] = i * 10;
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
输出:
0 10 20 30 40
解释:
- 使用
malloc
动态分配内存。 - 初始化内存并打印值。
- 使用
free
释放内存。
9️⃣ 参考资料
📖 C 标准库 – <stdlib.h>
官方文档
📖 GNU C Library – stdlib.h
📖 ISO C 标准(PDF)
📌 总结
<stdlib.h>
是 C 标准库中用于执行程序控制、内存管理、转换操作和生成随机数的核心头文件。它提供了许多实用函数,如内存分配、进程控制、字符串转换等,几乎所有 C 程序都需要依赖这一库。
发表回复