C语言 标准库
大白话解释: 向操作系统申请一块指定大小的内存空间。
详细说明: malloc 是 memory allocation(内存分配)的缩写。它会在堆内存中分配一块连续的内存区域,并返回指向该内存区域起始地址的指针。如果分配失败,则返回 NULL。
💡 重要提示:使用 malloc 分配的内存不会初始化,里面的值是随机的垃圾数据。使用前务必初始化或清零。
大白话解释: 申请一块内存,并自动初始化为0。
详细说明: calloc 是 contiguous allocation(连续分配)的缩写。它分配 num
个大小为 size
字节的连续内存空间。与 malloc 不同,calloc 会将分配的内存全部初始化为0。
大白话解释: 调整已分配内存块的大小。
详细说明: realloc 是 re-allocation(重新分配)的缩写。它用于调整先前分配的内存块的大小。可以增大或缩小内存块。如果扩大内存,新增部分的内容是未初始化的。
大白话解释: 归还之前申请的内存。
详细说明: 将之前通过 malloc、calloc 或 realloc 分配的内存归还给系统。调用 free 后,指针变为悬空指针,应避免再次使用。
⚠️ 警告:一定要为每个 malloc、calloc、realloc 调用对应的 free 函数,否则会造成内存泄漏!
long atol(const char* str);
long long atoll(const char* str);
大白话解释: 把字符串转换成整数。
详细说明: 这些函数将字符串转换为整数类型(int、long、long long)。它们会跳过前面的空白字符,从第一个数字或正负号开始转换,遇到非数字字符时停止。
#include <stdlib.h>
int main() {
char str[] = “12345”;
int num = atoi(str);
printf(“转换结果: %d”, num); // 输出: 12345
return 0;
}
大白话解释: 把字符串转换成浮点数。
详细说明: 将字符串转换为双精度浮点数(double)。同样会跳过前面的空白字符,转换直到遇到非浮点数字符为止。
unsigned long int strtoul(const char* str, char** endptr, int base);
大白话解释: 更强大的字符串转数字函数。
详细说明: 这些函数功能更强大,可以指定进制(如二进制、八进制、十进制、十六进制),并提供错误检测功能。endptr 参数指向转换结束后剩余字符串的位置。
大白话解释: 更强大的字符串转浮点数函数。
详细说明: 将字符串转换为双精度浮点数,提供更精确的控制和错误检测。endptr 参数指向转换结束后剩余字符串的位置。
大白话解释: 生成一个伪随机数。
详细说明: 返回一个范围在 0 到 RAND_MAX(通常是 32767)之间的伪随机整数。所谓的”伪随机”是因为这些数字实际上是通过算法生成的,并不是真正的随机数。
大白话解释: 设置随机数生成器的种子。
详细说明: 通过设置不同的种子值,可以使 rand 函数产生不同的随机数序列。通常使用当前时间作为种子值,确保每次运行程序时生成不同的随机序列。
#include <stdlib.h>
#include <time.h> // 包含 time 函数
int main() {
srand(time(0)); // 用当前时间设置种子
for(int i=0; i<5; i++) {
printf(“%d “, rand()); // 生成随机数
}
return 0;
}
💡 提示:不调用 srand 直接使用 rand,每次程序运行都会得到相同的随机数序列。
大白话解释: 正常终止程序运行。
详细说明: 终止程序运行,关闭所有打开的文件,并向操作系统返回状态码。通常,0 表示成功终止,非零值表示异常终止。
printf(“发生严重错误!”);
exit(1); // 错误退出
}
大白话解释: 立即异常终止程序。
详细说明: 导致程序异常终止,通常会产生一个核心转储文件(core dump)。它不会调用任何注册的退出处理函数,也不执行文件缓冲区的刷新。
大白话解释: 注册程序结束时执行的函数。
详细说明: 注册一个函数,在程序正常终止(通过 exit 或 main 函数返回)时被调用。可以注册多个函数,它们按注册的相反顺序执行。
void cleanup2() { printf(“清理资源2\n”); }
int main() {
atexit(cleanup2);
atexit(cleanup1);
printf(“主函数运行中…\n”);
return 0;
}
// 输出:
// 主函数运行中…
// 清理资源1
// 清理资源2
大白话解释: 执行系统命令。
详细说明: 将 command 字符串传递给操作系统的命令行解释器执行。例如在 Windows 上可以执行 “dir” 命令,在 Linux 上可以执行 “ls”。
int main() {
system(“echo 你好,世界!”); // 执行echo命令
return 0;
}
size_t num, size_t size,
int (*compar)(const void*, const void*));
大白话解释: 在有序数组中二分查找。
详细说明: 使用二分查找算法在已排序的数组中查找指定元素。如果找到,则返回指向该元素的指针;否则返回 NULL。
📌 注意:数组必须已经按照比较函数的规则排序!
int (*compar)(const void*, const void*));
大白话解释: 快速排序算法。
详细说明: 对数组进行快速排序。需要提供一个比较函数,该函数决定数组中任意两个元素的排序顺序。
int compareInt(const void* a, const void* b) {
int arg1 = *(const int*)a;
int arg2 = *(const int*)b;
return (arg1 > arg2) – (arg1 < arg2);
}
int main() {
int arr[] = {5, 2, 8, 1, 4};
int n = sizeof(arr)/sizeof(arr[0]);
qsort(arr, n, sizeof(int), compareInt);
// 现在 arr = {1, 2, 4, 5, 8}
return 0;
}
long labs(long n);
long long llabs(long long n);
大白话解释: 计算整数的绝对值。
详细说明: 分别用于计算 int、long 和 long long 类型整数的绝对值(正数)。
ldiv_t ldiv(long numer, long denom);
lldiv_t lldiv(long long numer, long long denom);
大白话解释: 同时计算除法商和余数。
详细说明: 这些函数同时计算除法的商和余数,并将结果保存在一个结构体中返回。
printf(“商 = %d, 余数 = %d”, result.quot, result.rem);
// 输出: 商 = 7, 余数 = 2
大白话解释: 获取环境变量的值。
详细说明: 返回指向环境变量 name 的值的指针。如果该环境变量不存在,则返回 NULL。
if (path) {
printf(“PATH环境变量: %s”, path);
}