C 标准库 - <stdlib.h>详解

简介: `<stdlib.h>` 是 C 语言标准库中的头文件,提供了多种工具和函数,涵盖内存管理、进程控制、转换及随机数生成等功能。其中包括 `malloc`、`calloc` 和 `free` 等内存管理函数,`atoi` 和 `atof` 等转换函数,以及 `rand` 和 `srand` 等随机数生成函数。此外,还提供了 `exit` 和 `atexit` 等程序控制函数,以及 `getenv` 和 `system` 等环境控制函数。

<stdlib.h> 是 C 语言标准库中的一个头文件,它提供了许多通用的工具和函数,用于内存管理、进程控制、转换和随机数生成等。以下是对 <stdlib.h> 中常用功能和函数的详细解读:

1. 内存管理函数

  • malloc(size_t size): 动态分配size字节的内存,并返回指向该内存块的指针。如果分配失败,返回 NULL

  • calloc(size_t num, size_t size): 动态分配内存以存储 numsize 字节的对象,并初始化所有位为零。如果分配失败,返回 NULL

  • realloc(void *ptr, size_t size): 重新分配指针 ptr 指向的内存块的大小为 size 字节。返回新的内存块指针,如果分配失败,返回 NULL

  • free(void *ptr): 释放由 malloccallocrealloc 所分配的内存。

2. 转换函数

  • atoi(const char *str): 将字符串 str 转换为整数。

  • atof(const char *str): 将字符串 str 转换为双精度浮点数。

  • `strtol(const char *str, char endptr, int base)**: 将字符串str转换为长整数,base指定转换的基数,可以是 2-36 或 0(根据str` 的格式自动推断)。

  • `strtod(const char *str, char endptr)**: 将字符串str` 转换为双精度浮点数。

3. 随机数生成函数

  • rand(void): 生成一个伪随机整数。

  • srand(unsigned int seed): 设置随机数生成器的种子为 seed。通常在程序开始时调用一次,以确保生成的随机数序列不同。

4. 程序退出控制

  • exit(int status): 终止程序的执行,status 通常为 0 表示成功,非零值表示错误。

  • atexit(void (*func)(void)): 注册一个函数 func,该函数在 exit() 被调用时执行。

5. 环境控制

  • getenv(const char *name): 返回环境变量 name 的值,若不存在则返回 NULL

  • system(const char *command): 在命令行中执行 command 并返回结果。

6. 数学常量和宏

  • RAND_MAX: 表示 rand() 函数可能返回的最大值。

使用示例

#include <stdio.h>
#include <stdlib.h>

int main() {
   
    // 动态内存分配示例
    int *array;
    size_t n = 5;
    array = (int *)malloc(n * sizeof(int));

    if (array == NULL) {
   
        fprintf(stderr, "Memory allocation failed\n");
        return 1;
    }

    // 初始化并打印数组
    for (size_t i = 0; i < n; i++) {
   
        array[i] = i * i;
        printf("%d ", array[i]);
    }

    // 释放内存
    free(array);

    // 随机数生成示例
    srand(time(NULL)); // 使用当前时间作为种子
    printf("\nRandom number: %d\n", rand());

    // 字符串转换示例
    const char *numStr = "1234";
    int num = atoi(numStr);
    printf("Converted number: %d\n", num);

    return 0;
}

注意事项

  1. 使用动态分配内存时,确保在使用后调用 free()
  2. 在任何情况下,检查返回值以处理内存分配失败或字符串转换失败的情况。
  3. 随机数生成器应确保通过 srand() 初始化种子,以避免每次程序运行时生成相同的随机数序列。

通过了解和使用这些函数,您可以更有效地管理内存,提高程序的灵活性和功能性。

相关文章
|
存储 安全 测试技术
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
1140 0
|
11月前
|
持续交付 云计算 开发者
docker优点
总之,Docker 的优点使其成为现代软件开发和部署中不可或缺的工具,为企业带来了更高的效率、灵活性和竞争力。随着云计算和微服务架构的发展,Docker 的重要性将进一步凸显。
327 64
|
开发者
C 标准库 - <stdio.h>详解
`&lt;stdio.h&gt;` 是 C 标准库中用于处理输入和输出(I/O)的头文件,提供了多种功能,如格式化输入输出、文件操作等。
|
机器学习/深度学习 人工智能 C语言
10个C语言实现源代码
10个重要的算法C语言实现源代码
|
机器学习/深度学习 人机交互 计算机视觉
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
基于YOLOv8深度学习的人脸面部表情识别系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战
|
SQL 搜索推荐 Java
什么是笛卡尔积及其在SQL查询中的应用
什么是笛卡尔积及其在SQL查询中的应用
|
存储 前端开发 安全
如何处理大文件上传
【4月更文挑战第20天】
1190 9
Python中strip()、lstrip()和rstrip()方法的区别与用法详解
在Python中,字符串是一种常见的数据类型,而处理字符串时,经常会用到 strip()、lstrip() 和 rstrip() 这几个方法。它们都用于删除字符串开头和/或结尾的指定字符或字符集合,但在具体使用时有一些区别。
|
NoSQL 关系型数据库 MySQL
多机部署:打造内网服务器集群
在多机部署教程中,了解如何配置分布式应用如Laravel以使用Redis同步用户状态。关键步骤包括:修改MySQL的`bind-address`至内网IP,重启服务;同样修改Redis的`bind`,重启服务;以及调整Elasticsearch的`network.host`和`discovery.seed_hosts`,并重启。通过这些步骤,确保服务间能内网通信,实现多服务器状态同步。
411 2