当前位置:首页 » 《关于电脑》 » 正文

C库 —— <stdlib.h>

3 人参与  2024年10月24日 15:20  分类 : 《关于电脑》  评论

点击全文阅读


引言

<stdlib.h> 库是C标准库中的一个重要部分,它提供了一组通用的工具函数,用于执行各种常见的操作,如动态内存分配、程序终止、数学计算、随机数生成和字符串转换等。掌握 <stdlib.h> 库的功能对于编写健壮和高效的C程序至关重要。本文将详细介绍 <stdlib.h> 库的各个方面,包括其函数、用法以及在实际编程中的应用。

<stdlib.h> 库的基本功能

<stdlib.h> 库包含许多重要的函数,这些函数可以分为以下几类:

程序控制函数内存管理函数数学计算函数随机数生成函数字符串转换函数搜索和排序函数

我们将逐一介绍这些函数的详细内容及其使用方法。

1. 程序控制函数

程序控制函数用于控制程序的执行流程,包括程序的正常终止和异常终止等操作。<stdlib.h> 库提供了以下常用的程序控制函数:

exit:终止程序abort:异常终止程序atexit:注册程序结束时执行的函数
exit 函数

exit 函数用于终止程序并返回状态码给操作系统,其基本语法如下:

void exit(int status);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    printf("Program will exit with status code 0.\n");    exit(0);    // 这行代码不会被执行    printf("This line will not be executed.\n");    return 0;}
abort 函数

abort 函数用于异常终止程序,其基本语法如下:

void abort(void);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    printf("Program will abort.\n");    abort();    // 这行代码不会被执行    printf("This line will not be executed.\n");    return 0;}
atexit 函数

atexit 函数用于注册程序结束时执行的函数,其基本语法如下:

int atexit(void (*func)(void));

示例代码:

#include <stdio.h>#include <stdlib.h>void cleanup(void) {    printf("Cleanup function called.\n");}int main() {    atexit(cleanup);    printf("Program will exit normally.\n");    return 0;}
2. 内存管理函数

内存管理函数用于动态分配和释放内存。<stdlib.h> 库提供了以下常用的内存管理函数:

malloc:分配内存calloc:分配并初始化内存realloc:重新分配内存free:释放内存
malloc 函数

malloc 函数用于分配指定大小的内存块,其基本语法如下:

void *malloc(size_t size);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int *arr;    int n = 5;    arr = (int *)malloc(n * sizeof(int));    if (arr == NULL) {        printf("Memory allocation failed.\n");        return 1;    }    for (int i = 0; i < n; i++) {        arr[i] = i + 1;    }    printf("Array elements: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    free(arr);    return 0;}
calloc 函数

calloc 函数用于分配并初始化内存块,其基本语法如下:

void *calloc(size_t num, size_t size);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int *arr;    int n = 5;    arr = (int *)calloc(n, sizeof(int));    if (arr == NULL) {        printf("Memory allocation failed.\n");        return 1;    }    printf("Array elements after calloc: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    free(arr);    return 0;}
realloc 函数

realloc 函数用于重新分配内存块,其基本语法如下:

void *realloc(void *ptr, size_t size);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int *arr;    int n = 5;    arr = (int *)malloc(n * sizeof(int));    if (arr == NULL) {        printf("Memory allocation failed.\n");        return 1;    }    for (int i = 0; i < n; i++) {        arr[i] = i + 1;    }    n = 10;    arr = (int *)realloc(arr, n * sizeof(int));    if (arr == NULL) {        printf("Memory reallocation failed.\n");        return 1;    }    for (int i = 5; i < n; i++) {        arr[i] = i + 1;    }    printf("Array elements after realloc: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    free(arr);    return 0;}
free 函数

free 函数用于释放动态分配的内存,其基本语法如下:

void free(void *ptr);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int *arr;    int n = 5;    arr = (int *)malloc(n * sizeof(int));    if (arr == NULL) {        printf("Memory allocation failed.\n");        return 1;    }    for (int i = 0; i < n; i++) {        arr[i] = i + 1;    }    printf("Array elements: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    free(arr);    return 0;}
3. 数学计算函数

<stdlib.h> 库提供了一组用于数学计算的函数:

abs:计算整数的绝对值labs:计算长整数的绝对值llabs:计算长长整数的绝对值div:计算整数的商和余数ldiv:计算长整数的商和余数lldiv:计算长长整数的商和余数
abs 函数

abs 函数用于计算整数的绝对值,其基本语法如下:

int abs(int x);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int x = -5;    printf("Absolute value of %d is %d\n", x, abs(x));    return 0;}
div 函数

div 函数用于计算整数的商和余数,其基本语法如下:

div_t div(int numer, int denom);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    int numer = 10;    int denom = 3;    div_t result = div(numer, denom);    printf("Quotient: %d, Remainder: %d\n", result.quot, result.rem);    return 0;}
4. 随机数生成函数

<stdlib.h> 库提供了一组用于生成随机数的函数:

rand:生成随机数srand:设置随机数种子
randsrand 函数

rand 函数用于生成随机数,其基本语法如下:

int rand(void);

srand 函数用于设置随机数种子,其基本语法如下:

void srand(unsigned int seed);

示例代码:

#include <stdio.h>#include <stdlib.h>#include <time.h>int main() {    srand(time(0));    printf("Random number: %d\n", rand());    printf("Random number: %d\n", rand());    printf("Random number: %d\n", rand());    return 0;}
5. 字符串转换函数

<stdlib.h> 库提供了一组用于将字符串转换为数值的函数:

atoi:将字符串转换为整数atol:将字符串转换为长整数atoll:将字符串转换为长长整数strtol:将字符串转换为长整数(带错误检查)strtoll:将字符串转换为长长整数(带错误检查)strtoul:将字符串转换为无符号长整数(带错误检查)strtoull:将字符串转换为无符号长长整数(带错误检查)strtod:将字符串转换为双精度浮点数(带错误检查)strtof:将字符串转换为单精度浮点数(带错误检查)strtold:将字符串转换为长双精度浮点数(带错误检查)
atoi 函数

atoi 函数用于将字符串转换为整数,其基本语法如下:

int atoi(const char *str);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    char str[] = "12345";    int num = atoi(str);    printf("Converted number: %d\n", num);    return 0;}
strtol 函数

strtol 函数用于将字符串转换为长整数,并带有错误检查,其基本语法如下:

long int strtol(const char *str, char **endptr, int base);

示例代码:

#include <stdio.h>#include <stdlib.h>int main() {    char str[] = "12345abc";    char *endptr;    long int num = strtol(str, &endptr, 10);    printf("Converted number: %ld\n", num);    printf("Remaining string: %s\n", endptr);    return 0;}
6. 搜索和排序函数

<stdlib.h> 库提供了一组用于搜索和排序的函数:

qsort:快速排序bsearch:二分查找
qsort 函数

qsort 函数用于对数组进行快速排序,其基本语法如下:

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

示例代码:

#include <stdio.h>#include <stdlib.h>int compare(const void *a, const void *b) {    return (*(int*)a - *(int*)b);}int main() {    int arr[] = {5, 2, 9, 1, 5, 6};    int n = sizeof(arr) / sizeof(arr[0]);    qsort(arr, n, sizeof(int), compare);    printf("Sorted array: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    return 0;}
bsearch 函数

bsearch 函数用于对排序数组进行二分查找,其基本语法如下:

void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

示例代码:

#include <stdio.h>#include <stdlib.h>int compare(const void *a, const void *b) {    return (*(int*)a - *(int*)b);}int main() {    int arr[] = {1, 2, 5, 5, 6, 9};    int n = sizeof(arr) / sizeof(arr[0]);    int key = 5;    int *item = (int*)bsearch(&key, arr, n, sizeof(int), compare);    if (item != NULL) {        printf("Found item: %d\n", *item);    } else {        printf("Item not found\n");    }    return 0;}
图表描述

为了更清晰地展示 <stdlib.h> 库的各个函数,我们可以使用图表进行描述。以下是一些常用函数及其分类的图表:

程序控制函数
函数描述
exit终止程序
abort异常终止程序
atexit注册程序结束时执行的函数
内存管理函数
函数描述
malloc分配内存
calloc分配并初始化内存
realloc重新分配内存
free释放内存
数学计算函数
函数描述
abs计算整数的绝对值
labs计算长整数的绝对值
llabs计算长长整数的绝对值
div计算整数的商和余数
ldiv计算长整数的商和余数
lldiv计算长长整数的商和余数
随机数生成函数
函数描述
rand生成随机数
srand设置随机数种子
字符串转换函数
函数描述
atoi将字符串转换为整数
atol将字符串转换为长整数
atoll将字符串转换为长长整数
strtol将字符串转换为长整数(带错误检查)
strtoll将字符串转换为长长整数(带错误检查)
strtoul将字符串转换为无符号长整数(带错误检查)
strtoull将字符串转换为无符号长长整数(带错误检查)
strtod将字符串转换为双精度浮点数(带错误检查)
strtof将字符串转换为单精度浮点数(带错误检查)
strtold将字符串转换为长双精度浮点数(带错误检查)
搜索和排序函数
函数描述
qsort快速排序
bsearch二分查找
实际应用示例
示例一:动态数组的创建和操作

以下代码示例演示了如何使用 mallocrealloc 函数创建和操作动态数组:

#include <stdio.h>#include <stdlib.h>int main() {    int *arr;    int n = 5;    arr = (int *)malloc(n * sizeof(int));    if (arr == NULL) {        printf("Memory allocation failed.\n");        return 1;    }    for (int i = 0; i < n; i++) {        arr[i] = i + 1;    }    printf("Initial array: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    n = 10;    arr = (int *)realloc(arr, n * sizeof(int));    if (arr == NULL) {        printf("Memory reallocation failed.\n");        return 1;    }    for (int i = 5; i < n; i++) {        arr[i] = i + 1;    }    printf("Resized array: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    free(arr);    return 0;}
示例二:字符串转换和数学计算

以下代码示例演示了如何使用 atoiabs 函数将字符串转换为整数并计算其绝对值:

#include <stdio.h>#include <stdlib.h>int main() {    char str[] = "-12345";    int num = atoi(str);    printf("Converted number: %d\n", num);    printf("Absolute value: %d\n", abs(num));    return 0;}
示例三:快速排序和二分查找

以下代码示例演示了如何使用 qsort 函数对数组进行快速排序,并使用 bsearch 函数在排序后的数组中进行二分查找:

#include <stdio.h>#include <stdlib.h>int compare(const void *a, const void *b) {    return (*(int*)a - *(int*)b);}int main() {    int arr[] = {5, 2, 9, 1, 5, 6};    int n = sizeof(arr) / sizeof(arr[0]);    int key = 5;    qsort(arr, n, sizeof(int), compare);    printf("Sorted array: ");    for (int i = 0; i < n; i++) {        printf("%d ", arr[i]);    }    printf("\n");    int *item = (int*)bsearch(&key, arr, n, sizeof(int), compare);    if (item != NULL) {        printf("Found item: %d\n", *item);    } else {        printf("Item not found\n");    }    return 0;}
结论

<stdlib.h> 库是C标准库中用于执行各种常见操作的重要工具。通过使用这些程序控制、内存管理、数学计算、随机数生成、字符串转换和搜索排序函数,程序员可以简化对常见任务的处理,提高代码的可读性和可维护性。本文详细介绍了 <stdlib.h> 库的各个函数及其用法,并提供了实际应用示例和图表描述,帮助读者深入理解和掌握这些函数的使用。希望本文对读者在C语言编程中的实践有所帮助。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/176871.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 林晚夏江肆年(进错房,嫁给八零最牛特种兵在线阅读)全文免费阅读无弹窗大结局_(林晚夏江肆年)进错房,嫁给八零最牛特种兵在线阅读免费阅读全文最新章节列表_笔趣阁(林晚夏江肆年) -
  • 进错房,嫁给八零最牛特种兵完整版阅读小说(林晚夏江肆年)全文免费阅读无弹窗大结局_(进错房,嫁给八零最牛特种兵完整版阅读)林晚夏江肆年免费阅读全文最新章节列表_笔趣阁(进错房,嫁给八零最牛特种兵完整版阅读) -
  • 新雪藏旧事全文全文(商云萝周砚京)全文免费阅读无弹窗大结局_(新雪藏旧事全文小说免费阅读)最新章节列表_笔趣阁(新雪藏旧事全文) -
  • 在线免费小说重生七零替嫁:不嫁教授,嫁军官_乔珊珊乔婉月新热门小说_热门小说乔珊珊乔婉月
  • 免费小说《冯云漪厉晋泽》已完结(冯云漪厉晋泽)热门小说大结局全文阅读笔趣阁
  • 祁兰湘邵黎晖小说_祁兰湘邵黎晖完整版大结局小说免费阅读
  • 完整免费小说老公心疼青梅将她留宿新房,却将怀孕的我赶出家门(乔玥傅慎行姜禾)_老公心疼青梅将她留宿新房,却将怀孕的我赶出家门(乔玥傅慎行姜禾)完本小说免费阅读(乔玥傅慎行姜禾)
  • 新雪藏旧事:结局+番外+完结免费小说在线阅读_小说完结推荐新雪藏旧事:结局+番外+完结商云萝周砚京热门小说
  • 初逢青山梦长安(顾怀瑾沈书妤)阅读 -
  • 无删减版《绝对权力:从天崩开局走上官途巅峰》在线免费阅读
  • 《绝对权力:从天崩开局走上官途巅峰》小说在线试读,《绝对权力:从天崩开局走上官途巅峰》最新章节目录
  • 裴泽苏星辰何娇(满目星辰不及你小说)精彩章节在线阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1