stdlib.h
<stdlib.h> 是 C 标准库中最常用的头文件之一,提供内存分配、进程控制、类型转换、随机数、搜索排序等功能。掌握这些函数是高效 C 编程的基础。
内存分配
#include <stdlib.h>
/* 分配 */
int *p = malloc(100 * sizeof(int));
int *q = calloc(100, sizeof(int)); /* 初始化为 0 */
int *r = realloc(p, 200 * sizeof(int)); /* 调整大小 */
/* 释放 */
free(p);
类型转换
int i = atoi("42"); /* 字符串转 int */
long l = atol("1234567890");
double d = atof("3.14");
/* 更安全的转换(C99) */
char *end;
long val = strtol("42", &end, 10); /* 10 进制 */
unsigned long uval = strtoul("FF", &end, 16); /* 16 进制 */
double dval = strtod("3.14", &end);
/* 检查转换是否成功 */
if (*end == '\0') {
/* 完整转换 */
}
随机数
#include <stdlib.h>
#include <time.h>
srand(time(NULL)); /* 初始化种子 */
int r = rand(); /* 0 到 RAND_MAX */
int dice = rand() % 6 + 1; /* 1 到 6 */
/* 更好的范围映射 */
int range = rand() / (RAND_MAX / 6 + 1); /* 0 到 5 */
搜索和排序
#include <stdlib.h>
int arr[] = {3, 1, 4, 1, 5, 9};
int n = sizeof(arr) / sizeof(arr[0]);
/* 排序 */
qsort(arr, n, sizeof(int), compare_int);
/* 搜索(必须先排序) */
int key = 4;
int *found = bsearch(&key, arr, n, sizeof(int), compare_int);
/* 比较函数 */
int compare_int(const void *a, const void *b)
{
return (*(int *)a - *(int *)b);
}
进程控制
#include <stdlib.h>
exit(0); /* 正常退出 */
exit(1); /* 错误退出 */
abort(); /* 异常终止(产生 SIGABRT) */
atexit(cleanup); /* 注册退出时调用的函数 */
环境变量
#include <stdlib.h>
char *path = getenv("PATH");
if (path != NULL) {
printf("PATH=%s\n", path);
}
/* 设置环境变量(POSIX,非标准 C) */
/* setenv("VAR", "value", 1); */
常见错误
atoi 不检查错误:
int x = atoi("not a number"); /* 返回 0,无法区分错误和 "0" */
/* 正确 */
char *end;
long x = strtol("not a number", &end, 10);
if (*end != '\0') {
/* 转换错误 */
}
rand % 范围不均:
int r = rand() % 100; /* 低数值概率略高 */
/* 更好的方法 */
int r = rand() / (RAND_MAX / 100 + 1);
最佳实践
- 用
strtol/strtod替代atoi/atof - 检查内存分配返回值
rand用于简单场景,密码学用专用库qsort/bsearch比较函数返回 int- 注册
atexit清理资源