<stdlib.h> 是 C 标准库中的另一个核心头文件,提供了一些常用的功能,包括内存分配、进程控制、转换功能、随机数生成等。它包含了多种实用的函数,用于处理程序执行过程中的各种任务。


📖 目录

  1. <stdlib.h> 简介
  2. 常用函数
  3. 内存管理
  4. 进程控制
  5. 转换函数
  6. 随机数生成
  7. 退出程序
  8. 示例代码
  9. 参考资料

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);

  • 返回值:生成的随机整数,范围从 0RAND_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

解释

  1. 使用 malloc 动态分配内存。
  2. 初始化内存并打印值。
  3. 使用 free 释放内存。

9️⃣ 参考资料

📖 C 标准库 – <stdlib.h> 官方文档
📖 GNU C Library – stdlib.h
📖 ISO C 标准(PDF)


📌 总结

<stdlib.h> 是 C 标准库中用于执行程序控制、内存管理、转换操作和生成随机数的核心头文件。它提供了许多实用函数,如内存分配、进程控制、字符串转换等,几乎所有 C 程序都需要依赖这一库。