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() 初始化种子,以避免每次程序运行时生成相同的随机数序列。

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

相关文章
|
11月前
|
存储 安全 开发者
C 标准库 - <string.h>详解
`&lt;string.h&gt;` 是 C 标准库中用于处理字符串的头文件,提供了复制、拼接、比较、查找等操作。常用函数包括 `strcpy`、`strncpy`、`strcat`、`strncat`、`strlen`、`strcmp`、`strncmp`、`strchr` 和 `strstr`。此外,还提供了辅助函数如 `memcpy` 和 `memset`。这些函数帮助开发者有效处理字符串,构建更强大的 C 程序。注意事项包括确保目标数组空间足够、正确处理 null 结束符,并使用安全版本函数减少风险。
590 11
|
存储 安全 测试技术
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
1102 0
|
11月前
|
SQL 存储 JSON
SQL,解析 json
SQL,解析 json
187 8
|
10月前
|
持续交付 云计算 开发者
docker优点
总之,Docker 的优点使其成为现代软件开发和部署中不可或缺的工具,为企业带来了更高的效率、灵活性和竞争力。随着云计算和微服务架构的发展,Docker 的重要性将进一步凸显。
307 64
|
11月前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
254 4
Android开发表情emoji功能开发
|
11月前
|
消息中间件 人工智能 Cloud Native
|
11月前
|
传感器 存储 安全
C 标准库 - <stdlib.h>在物联网中的应用
在物联网(IoT)应用中,C 标准库 `&lt;stdlib.h&gt;` 提供了关键功能,尤其适用于资源受限的环境。它支持动态内存管理(如 `malloc` 和 `calloc`),便于处理传感器数据;字符串转换函数(如 `atoi`、`atof`)简化了网络数据解析;随机数生成(`rand`、`srand`)用于测试和安全;进程控制(`exit`、`system`)以及环境配置读取(`getenv`)等功能则增强了设备的灵活性和稳定性。通过高效利用这些工具,开发者能在嵌入式系统中实现更强大和可靠的 IoT 应用。
123 10
|
11月前
|
存储 数据采集 机器学习/深度学习
Star Tower Chain:以数据治理开启区块链智能时代
随着科技的进步,区块链步入智能时代,Star Tower Chain 以数据治理为核心,开启区块链新篇章。通过深度数据分析与挖掘,提供个性化推荐服务,并利用AI与机器学习提升数据质量与安全性,保障用户数据不被篡改。同时,智能升级的数据存储及查询系统提升了用户体验,Star Tower Chain 致力于持续深化数据治理,推动区块链智能时代的进一步发展,为用户提供更高效、安全的服务。
|
SQL 搜索推荐 Java
什么是笛卡尔积及其在SQL查询中的应用
什么是笛卡尔积及其在SQL查询中的应用