C 标准库 - <stdlib.h>

简介: C 标准库 - <stdlib.h>

简介

<stdlib.h> 头文件定义了四个变量类型、一些宏和各种通用工具函数。

库变量

下面是头文件 stdlib.h 中定义的变量类型:

序号 变量 & 描述
1 size_t
2 wchar_t
3 div_t
4 ldiv_t

库宏

下面是头文件 stdlib.h 中定义的宏:

序号 宏 & 描述
1 NULL
2 EXIT_FAILURE
3 EXIT_SUCCESS
4 RAND_MAX
5 MB_CUR_MAX


库函数

下面是头文件 stdlib.h 中定义的函数:

1. double atof(const char *str)

把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "3.14";
    double value = atof(str);
    printf("The converted value is: %lf\n", value);
    return 0;
}

2. int atoi(const char *str)

把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "12345";
    int value = atoi(str);
    printf("The converted value is: %d\n", value);
    return 0;
}

3. long int atol(const char *str)

把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "987654321";
    long int value = atol(str);
    printf("The converted value is: %ld\n", value);
    return 0;
}

4. double strtod(const char *str, char **endptr)

把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "3.14159 This is a string";
    char *endptr;
    double value = strtod(str, &endptr);
    printf("The converted value is: %lf\n", value);
    printf("The remaining string is: %s\n", endptr);
    return 0;
}

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

把参数 str 所指向的字符串转换为一个长整数(类型为 long int 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "12345 This is a string";
    char *endptr;
    long int value = strtol(str, &endptr, 10);
    printf("The converted value is: %ld\n", value);
    printf("The remaining string is: %s\n", endptr);
    return 0;
}

6. unsigned long int strtoul(const char *str, char **endptr, int base)

把参数 str 所指向的字符串转换为一个无符号长整数(类型为 unsigned long int 型)。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "12345 This is a string";
    char *endptr;
    unsigned long int value = strtoul(str, &endptr, 10);
    printf("The converted value is: %lu\n", value);
    printf("The remaining string is: %s\n", endptr);
    return 0;
}

7. void *calloc(size_t nitems, size_t size)

分配所需的内存空间,并返回一个指向它的指针。

#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)calloc(5, sizeof(int));
    free(ptr);
    return 0;
}

8. void free(void *ptr)

释放之前调用 callocmallocrealloc 所分配的内存空间。

#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)malloc(5 * sizeof(int));
    free(ptr);
    return 0;
}

9. void *malloc(size_t size)

分配所需的内存空间,并返回一个指向它的指针。

#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)malloc(5 * sizeof(int));
    free(ptr);
    return 0;
}

10. void *realloc(void *ptr, size_t size)

尝试重新调整之前调用 malloccalloc 所分配的 ptr 所指向的内存块的大小。

#include <stdlib.h>

int main() {
    int *ptr;
    ptr = (int *)malloc(5 * sizeof(int));
    ptr = (int *)realloc(ptr, 10 * sizeof(int));
    free(ptr);
    return 0;
}

11. void abort(void)

使一个异常程序终止。

#include <stdlib.h>



int main() {
    abort();
    return 0;
}

12. int atexit(void (*func)(void))

当程序正常终止时,调用指定的函数 func

#include <stdlib.h>
#include <stdio.h>

void cleanup_function() {
    printf("Exiting program...\n");
}

int main() {
    atexit(cleanup_function);
    return 0;
}
#include <stdlib.h>
#include <stdio.h>

void cleanup_function() {
    printf("Exiting program...\n");
}

int main() {
    atexit(cleanup_function);
    return 0;
}

13. void exit(int status)

使程序正常终止。

#include <stdlib.h>

int main() {
    exit(0);
    return 0;
}

14. char *getenv(const char *name)

搜索 name 所指向的环境字符串,并返回相关的值给字符串。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *value = getenv("HOME");
    printf("Home directory: %s\n", value);
    return 0;
}

15. int system(const char *string)

string 指定的命令传给要被命令处理器执行的主机环境。

#include <stdlib.h>

int main() {
    system("ls -l");
    return 0;
}

16. void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *))

执行二分查找。

#include <stdlib.h>
#include <stdio.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int values[] = {2, 5, 8, 12, 16, 23, 38, 56, 72, 91};
    int key = 23;
    int *result = (int *)bsearch(&key, values, 10, sizeof(int), compare);
    if (result != NULL)
        printf("Value %d found in the array.\n", *result);
    else
        printf("Value not found in the array.\n");
    return 0;
}

17. void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

数组排序。

#include <stdlib.h>
#include <stdio.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int values[] = {42, 10, 6, 88, 15};
    int n = sizeof(values) / sizeof(values[0]);
    qsort(values, n, sizeof(int), compare);
    for (int i = 0; i < n; ++i) {
        printf("%d ", values[i]);
    }
    printf("\n");
    return 0;
}

18. int abs(int x)

返回 x 的绝对值。

#include <stdlib.h>
#include <stdio.h>

int main() {
    int x = -5;
    int abs_value = abs(x);
    printf("The absolute value of %d is: %d\n", x, abs_value);
    return 0;
}


19. div_t div(int numer, int denom)

分子除以分母。

#include <stdlib.h>
#include <stdio.h>

int main() {
    div_t result = div(10, 3);
    printf("Quotient: %d, Remainder: %d\n", result.quot, result.rem);
    return 0;
}

20. long int labs(long int x)

返回 x 的绝对值。

#include <stdlib.h>
#include <stdio.h>

int main() {
    long int x = -123456;
    long int abs_value = labs(x);
    printf("The absolute value of %ld is: %ld\n", x, abs_value);
    return 0;
}

21. ldiv_t ldiv(long int numer, long int denom)

分子除以分母。

#include <stdlib.h>
#include <stdio.h>

int main() {
    ldiv_t result = ldiv(100, 25);
    printf("Quotient: %ld, Remainder: %ld\n", result.quot, result.rem);
    return 0;
}

22. int rand(void)

返回一个范围在 0 到 RAND_MAX 之间的伪随机数。

#include <stdlib.h>
#include <stdio.h>

int main() {
    int random_value = rand();
    printf("Random value: %d\n", random_value);
    return 0;
}

23. void srand(unsigned int seed)

该函数播种由函数 rand 使用的随机数发生器。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

int main() {
    srand(time(NULL));
    int random_value = rand();
    printf("Random value: %d\n", random_value);
    return 0;
}


24. int mblen(const char *str, size_t n)

返回参数 str 所指向的多字节字符的长度。

#include <stdlib.h>
#include <stdio.h>

int main() {
    const char *str = "A";
    int length = mblen(str, MB_CUR_MAX);
    printf("Character length: %d\n", length);
    return 0;
}

25. size_t mbstowcs(schar_t *pwcs, const char *str, size_t n)

把参数 str 所指向的多字节字符的字符串转换为参数 pwcs 所指向的数组。

#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

int main() {
    const char *str = "AB";
    wchar_t pwcs[10];
    size_t result = mbstowcs(pwcs, str, 10);
    wprintf(L"Converted string: %ls\n", pwcs);
    printf("Number of wide characters: %zu\n", result);
    return 0;
}

26. int mbtowc(wchar_t *pwc, const char *str, size_t n)

检查参数 str 所指向的多字节字符。

#inc#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

int main() {
    const char *str = "A";
    wchar_t pwc;
    int result = mbtowc(&pwc, str, MB_CUR_MAX);
    if (result > 0) {
        wprintf(L"Character: %lc\n", pwc

);
    } else if (result == 0) {
        printf("Null character detected.\n");
    } else {
        printf("Invalid multibyte character.\n");
    }
    return 0;
}


27. size_t wcstombs(char *str, const wchar_t *pwcs, size_t n)

把数组 pwcs 中存储的编码转换为多字节字符,并把它们存储在字符串 str 中。

#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

int main() {
    const wchar_t pwcs[] = {L'A', L'B', L'\0'};
    char str[10];
    size_t result = wcstombs(str, pwcs, 10);
    printf("Converted string: %s\n", str);
    printf("Number of bytes: %zu\n", result);
    return 0;
}


28. int wctomb(char *str, wchar_t wchar)

检查对应于参数 wchar 所给出的多字节字符的编码。

#include <stdlib.h>
#include <stdio.h>
#include <wchar.h>

int main() {
    wchar_t wchar = L'A';
    char str[MB_CUR_MAX];
    int result = wctomb(str, wchar);
    if (result > 0) {
        printf("Multibyte character: %s\n", str);
    } else {
        printf("Invalid wide character.\n");
    }
    return 0;
}


以上是 stdlib.h 中定义的所有函数的详细介绍和示例。该头文件提供了一系列有用的工具函数,能够帮助程序员进行内存分配、随机数生成、字符串转换等操作。熟练掌握这些函数将对编程工作大有裨益。

相关文章
|
9月前
|
存储 自然语言处理 安全
C/C++ (stdio.h)标准库详解
C/C++ (stdio.h)标准库详解
350 0
|
5月前
|
开发者
C 标准库 - <stdio.h>详解
`&lt;stdio.h&gt;` 是 C 标准库中用于处理输入和输出(I/O)的头文件,提供了多种功能,如格式化输入输出、文件操作等。
|
5月前
|
程序员 C++
C 标准库 - <setjmp.h>详解
`&lt;setjmp.h&gt;` 是 C 标准库中的头文件,用于处理程序的非局部跳转。它提供了 `setjmp` 和 `longjmp` 函数,允许程序保存和恢复执行状态,适用于错误处理和复杂控制流(如协程)。主要概念包括跳转和上下文保存。使用时需注意局部变量作用域、不对称性及避免滥用。
97 10
|
编译器 程序员 C语言
26 C语言 - 头文件
26 C语言 - 头文件
69 0
|
4月前
|
编译器 C语言
C语言:typedef 和 define 有什么区别
在C语言中,`typedef`和`#define`都是用来创建标识符以简化复杂数据类型或常量的使用,但它们之间存在本质的区别。`typedef`用于定义新的数据类型别名,它保留了数据类型的特性但不分配内存。而`#define`是预处理器指令,用于定义宏替换,既可用于定义常量,也可用于简单的文本替换,但在编译前进行,过度使用可能导致代码可读性下降。正确选择使用`typedef`或`#define`可以提高代码质量和可维护性。
|
9月前
|
C语言
【C语言】#define的认识
【C语言】#define的认识
|
2月前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
69 9
|
9月前
|
编译器 C语言
【C语言】什么是宏定义?(#define详解)
【C语言】什么是宏定义?(#define详解)
174 0
|
C语言 数据安全/隐私保护
浅谈C语言的输入输出函数
浅谈C语言的输入输出函数
|
3月前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。

热门文章

最新文章