7. 标准实用工具库 - <stdlib.h>
在《C语言标准库》中,<stdlib.h>
是一个非常重要的头文件,它提供了多种实用程序函数,包括内存分配、随机数生成、字符串转换、程序环境控制等。以下我们将详细介绍其中的几个关键部分。
7.1. 转换函数
7.1.1. 字符串到数字转换
atoi
: 将字符串转换为整数。atof
: 将字符串转换为浮点数。strtol
: 将字符串转换为长整数,支持指定进制。strtod
: 将字符串转换为双精度浮点数。
使用场景及注意事项:
- 这些函数在处理用户输入时非常有用,但是需要注意输入格式的合法性以及错误处理,例如
atoi
遇到非法输入时可能返回0,这与输入字符串实际为“0”无法区分。因此更推荐使用strtol
和strtod
,它们提供了更好的错误信息。
#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
: 将浮点数转换为字符串 (需要自定义实现)。
自定义实现示例:
itoa
和ftoa
常用于格式化数字以便输出,如将统计信息、传感器读取结果等以字符串形式呈现。
#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. rand
和 srand
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;
}
- 以上各个部分用例都为简化的演示,实际使用时应根据具体场景来处理异常和错误以确保程序的健壮性。