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

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

相关文章
|
Python
python自动生成含样式的Excel表格数据案例
python自动生成含样式的Excel表格数据案例
560 1
|
消息中间件 NoSQL Java
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
Redis Streams在Spring Boot中的应用:构建可靠的消息队列解决方案【redis实战 二】
8772 1
|
存储 安全 开发者
C 标准库 - <string.h>详解
`&lt;string.h&gt;` 是 C 标准库中用于处理字符串的头文件,提供了复制、拼接、比较、查找等操作。常用函数包括 `strcpy`、`strncpy`、`strcat`、`strncat`、`strlen`、`strcmp`、`strncmp`、`strchr` 和 `strstr`。此外,还提供了辅助函数如 `memcpy` 和 `memset`。这些函数帮助开发者有效处理字符串,构建更强大的 C 程序。注意事项包括确保目标数组空间足够、正确处理 null 结束符,并使用安全版本函数减少风险。
930 11
|
存储 芯片 内存技术
计算机组成原理常见面试题目总结,含答案
计算机组成原理常见面试题目总结,含答案
|
机器学习/深度学习 安全 API
爱回收平台技术揭秘:构建高效、安全、用户友好的二手物品回收生态系统
爱回收利用微服务架构打造高效安全的二手电子回收平台。系统通过API Gateway处理前端请求,各微服务独立处理业务逻辑,如商品评估、订单创建和支付结算,采用机器学习算法预估价格。安全策略包括OAuth2.0授权、数据加密、访问控制和DDoS防护。性能优化涉及缓存、负载均衡及数据库优化,提供便捷、透明的服务,促进可持续发展。
797 1
|
SQL 关系型数据库 MySQL
mysql密码的初始化,修改与重置
【8月更文挑战第16天】在 MySQL 中,可通过特定步骤初始化、修改或重置密码: 1. **初始化密码**:适合首次安装或遗忘 root 密码。需先停用 MySQL 服务,以特殊模式启动(跳过权限表),登录后更新 root 用户密码,并重启服务。 2. **修改密码**:直接使用 `ALTER USER` SQL 语句或通过客户端工具如 MySQL Workbench 修改现有用户的密码。 3. **重置密码**:若遗忘密码且初始化方法不可行,则需停用服务、修改配置文件以允许无密码启动 MySQL,登录后更改密码,并恢复正常配置重启服务。
4534 2
|
NoSQL 关系型数据库 MySQL
多机部署:打造内网服务器集群
在多机部署教程中,了解如何配置分布式应用如Laravel以使用Redis同步用户状态。关键步骤包括:修改MySQL的`bind-address`至内网IP,重启服务;同样修改Redis的`bind`,重启服务;以及调整Elasticsearch的`network.host`和`discovery.seed_hosts`,并重启。通过这些步骤,确保服务间能内网通信,实现多服务器状态同步。
492 2
|
算法 C语言
【C语言】:atoi函数的使用及其模拟实现
【C语言】:atoi函数的使用及其模拟实现
632 5
|
存储 前端开发 安全
如何处理大文件上传
【4月更文挑战第20天】
1500 9
|
C语言
C语言的标准库:string.h, math.h, stdlib.h
C语言的标准库:string.h, math.h, stdlib.h
485 1

热门文章

最新文章