首页 > 自考资讯 > 培训提升

实战案例:C语言stdlib.h标准库的应用

2026 08 27 05:47:58

stdlib.h是在C语言中最重要的头文件之一,它包含了许多常用的函数和宏,用于动态内存分配、进程控制、类型转换、数学运算(随机数/绝对值)和搜索排序等操作。在之前的内存管理、字符串转整型等操作中,都已经使用过stdlib.h中的函数。

动态内存分配

动态内存分配是指在程序运行时,根据需要动态地分配内存空间;主要包含malloc、calloc、realloc和free等函数,具体功能说明如下。

函数名

功能描述

malloc

分配指定字节数的内存空间,返回指向该内存空间的指针

calloc

分配指定数量和字节数的内存空间,返回指向该内存空间的指针

realloc

重新分配之前分配的内存空间,返回指向新内存空间的指针

free

释放之前分配的内存空间

其中calloc和malloc的区别主要是calloc会将分配的内存空间初始化为0,而malloc不会,如果有需要初始化的内存空间,建议使用calloc,使用malloc需要后续使用memset函数进行初始化。relloc则需要在已申请的内存空间基础上,重新分配内存空间,返回指向新内存空间的指针。

关于动态内存分配,具体示例如下所示。

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) { // 申请int类型的内存空间 int *p = malloc(sizeof(int)); if (p == NULL) { printf("malloc failed"); return -1; } *p = 10; printf("*p: %d\n", *p); free(p); // 申请2个int类型的内存空间 int *p2 = calloc(2, sizeof(int)); if (p2 == NULL) { printf("calloc failed"); return -1; } printf("p2[0]: %d\n", p2[0]); printf("p2[1]: %d\n", p2[1]); free(p2); // 申请2个int类型的内存空间,后续扩展为4个int类型的内存空间 int *p3 = malloc(2 * sizeof(int)); p3 = realloc(p3, 4 * sizeof(int)); if (p3 == NULL) { printf("realloc failed"); return -1; } *(p3 + 3) = 100; printf("p3[3]: %d\n", p3[3]); free(p3); return 0;}

具体执行结果如下所示。

数值转换

stdlib.h中包含一系列数值函数,用于将字符串转换为数值类型,包含atoi、atol、atof等函数;具体功能说明如下。

函数名

功能描述

atoi

将字符串转换为整数

atol

将字符串转换为长整数

atof

将字符串转换为浮点数

strtol

将字符串转换为长整数

strtod

将字符串转换为双精度浮点数

对于这些函数,具体使用示例如下所示。

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) { char *pstr = NULL; // 将字符串转换为整数 char str[] = "12345"; int num = atoi(str); printf("num: %d\n", num); // 将字符串转换为长整数 char str2[] = "12345"; long int num2 = atol(str2); printf("num2: %ld\n", num2); num2 = strtol(str2, &pstr, 10); printf("num2: %ld\n", num2); // 将字符串转换为浮点数 char str3[] = "12345.6789"; double d = atof(str3); printf("d: %f\n", d); d = strtod(str3, &pstr); printf("d: %f\n", d); return 0;}

具体执行结果如下所示。

随机数生成

stdlib.h中包含一系列函数用于生成随机数,包含rand和srand函数;具体功能说明如下。

函数名

功能描述

srand

设置随机数生成的种子,参数为一个整数

rand

生成一个随机数,返回一个0到RAND_MAX之间的整数

对于这些函数,具体使用示例如下所示。

#include <stdio.h>#include <stdlib.h>#include <time.h>int main(int argc, char *argv[]) { // 设置随机数生成的种子 srand(time(NULL)); // 生成随机数 int num = rand(); printf("num: %d\n", num); // 生成0-100随机数 num = rand()%100; printf("num: %d\n", num); return 0;}

具体执行结果如下所示。

流程控制

stdlib.h中还包含一些流程控制函数,包含exit、abort和atexit函数;具体功能说明如下。

函数名

功能描述

exit

终止程序的执行,参数为一个整数,用于表示程序的退出状态

abort

终止程序的执行,不执行atexit注册的函数

atexit

注册一个函数,在程序正常终止时执行

system

执行一个shell命令

对于这些函数,具体使用示例如下所示。

#include <stdio.h>#include <stdlib.h>void cleanup() { printf("Cleaning up...\n");}int main(int argc, char *argv[]) { atexit(cleanup); // 执行shell命令 system("ls"); // 终止程序执行 exit(0); return 0;}

具体执行结果如下所示。

数学运算

stdlib.h中还包含一些数学运算函数,包含abs、div、labs、ldiv等函数;具体功能说明如下。

函数名

功能描述

abs

计算整数的绝对值

div

计算两个整数的商和余数

labs

计算长整数的绝对值

ldiv

计算两个长整数的商和余数

对于这些函数,具体使用示例如下所示。

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]) { // 计算整数的绝对值 int num = -10; int abs_num = abs(num); printf("abs_num: %d\n", abs_num); // 计算两个整数的商和余数 int a = 10, b = 3; div_t result = div(a, b); printf("quotient: %d, remainder: %d\n", result.quot, result.rem); // 计算长整数的绝对值 long int num2 = -100000L; long int abs_num2 = labs(num2); printf("abs_num2: %ld\n", abs_num2); // 计算两个长整数的商和余数 long int c = 100000L, d = 30000L; ldiv_t result2 = ldiv(c, d); printf("quotient: %ld, remainder: %ld\n", result2.quot, result2.rem); return 0;}

具体执行结果如下所示。

搜索和排序

stdlib.h中还包含一些搜索和排序函数,包含qsort和bsearch函数;具体功能说明如下。

函数名

功能描述

qsort

对数组进行快速排序

bsearch

在已排序的数组中进行二分搜索

对于这些函数,具体使用示例如下所示。

#include <stdio.h>#include <stdlib.h>int compare(const void *a, const void *b) { return (*(int*)a - *(int*)b);}int main(int argc, char *argv[]) { int arr[] = {5, 2, 8, 1, 9}; int n = sizeof(arr)/sizeof(arr[0]); // 对数组进行快速排序 qsort(arr, n, sizeof(int), compare); // 输出排序后的数组 for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); // 在已排序的数组中进行二分搜索 int key = 8; int *result = bsearch(&key, arr, n, sizeof(int), compare); if (result != NULL) { printf("Found %d at index %ld\n", key, result - arr); } else { printf("%d not found\n", key); } return 0;}

具体执行结果如下所示。

总结

C语言虽然简陋,很多功能需要开发,不过仍然通过stdlib.h提供了一系列用于数学运算、流程控制、随机数生成、搜索和排序等功能的函数,在开发过程中,可以直接使用这些函数,来提高效率,值得去了解和使用。

版权声明:本文转载于今日头条,版权归作者所有,如果侵权,请联系本站编辑删除

猜你喜欢