【C语言教程】【常用类库】(七)标准实用工具库 - <stdlib.h>

7. 标准实用工具库 - <stdlib.h>

在《C语言标准库》中,<stdlib.h>是一个非常重要的头文件,它提供了多种实用程序函数,包括内存分配、随机数生成、字符串转换、程序环境控制等。以下我们将详细介绍其中的几个关键部分。

7.1. 转换函数
7.1.1. 字符串到数字转换
  • atoi: 将字符串转换为整数。
  • atof: 将字符串转换为浮点数。
  • strtol: 将字符串转换为长整数,支持指定进制。
  • strtod: 将字符串转换为双精度浮点数。

使用场景及注意事项

  • 这些函数在处理用户输入时非常有用,但是需要注意输入格式的合法性以及错误处理,例如atoi遇到非法输入时可能返回0,这与输入字符串实际为“0”无法区分。因此更推荐使用strtolstrtod,它们提供了更好的错误信息。
#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str1 = "12345";
    const char *str2 = "3.14159";
    int num1 = atoi(str1);  // 使用 atoi
    double num2 = atof(str2); // 使用 atof

    printf("Converted integer: %d\n", num1);
    printf("Converted double: %.2f\n", num2);

    return 0;
}
7.1.2. 数字到字符串
  • itoa: 将整数转换为字符串 (需要自定义实现)。
  • ftoa: 将浮点数转换为字符串 (需要自定义实现)。

自定义实现示例

  • itoaftoa 常用于格式化数字以便输出,如将统计信息、传感器读取结果等以字符串形式呈现。
#include <stdio.h>
#include <stdlib.h>

void itoa_custom(int num, char *str, int base) {
    // 自定义实现的 itoa 函数
    sprintf(str, "%d", num);
}

void ftoa_custom(double num, char *str, int precision) {
    // 自定义实现的 ftoa 函数
    sprintf(str, "%.*f", precision, num);
}

int main() {
    char str1[20];
    char str2[20];
    itoa_custom(12345, str1, 10);
    ftoa_custom(3.14159, str2, 2);

    printf("Integer to string: %s\n", str1);
    printf("Float to string: %s\n", str2);

    return 0;
}
7.2. 伪随机数生成
7.2.1. randsrand
  • rand: 生成一个伪随机数。
  • srand: 设置随机数生成器的种子。

应用场景

  • 多用于模拟实验、随机化算法和游戏开发等领域。需要注意的是,由于rand产生的是伪随机数,因此设置良好的种子(通常使用srand初始化)对于生成更随机的序列很重要。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(0));  // 设置随机数种子
    int random_number = rand();
    printf("Random number: %d\n", random_number);

    return 0;
}
7.2.2. 生成均匀分布的随机数示例
  • 可以进一步通过求模运算将随机数限制在某个范围内,并保证每个数出现的概率相同。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(0));
    int lower = 1, upper = 100;
    int random_number = (rand() % (upper - lower + 1)) + lower; // 在1到100之间
    printf("Uniformly distributed random number between %d and %d: %d\n", lower, upper, random_number);

    return 0;
}
7.3. 环境控制函数
7.3.1. 获取环境变量:getenv
  • getenv: 获取环境变量的值,用于读取系统配置等信息。例如可以用来了解操作系统的特性、路径配置等。
#include <stdio.h>
#include <stdlib.h>

int main() {
    char *path = getenv("PATH");
    if (path != NULL) {
        printf("Path: %s\n", path);
    } else {
        printf("No PATH variable found!\n");
    }

    return 0;
}
7.3.2. 程序终止:exit, abort
  • exit: 正常终止程序,并返回状态码供调用者判别。
  • abort: 异常终止程序,通常用于在程序遇到不可恢复错误时使用。

提示

  • 使用exit进行程序正常退出时,可以确保进行必要的清理操作,比如关闭打开的文件。
  • abort会立即终止程序执行,不保证缓冲区完全刷新,因此通常用于调试场景。
#include <stdio.h>
#include <stdlib.h>

void func() {
    printf("Function called\n");
    exit(1);  // 正常退出并返回状态 1
}

int main() {
    func();
    printf("This line will not be executed.\n"); // 由于exit,这一行将不执行

    return 0;
}
  • 以上各个部分用例都为简化的演示,实际使用时应根据具体场景来处理异常和错误以确保程序的健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值