头文件“<stdio.h>”和“<stdlib.h>”之间的区别

difference between header files “<stdio.h>” and “<stdlib.h>”

C编程中的头文件“<stdio.h>”和“<stdlib.h>”有什么区别?

区分这两个 header 文件的一个简单方法是“”包含 printf() 和 scanf() 的声明,而“”包含malloc() 和 free() 的声明。从这个意义上说,这两个 header 文件的主要区别可以认为,虽然“”包含“文件相关 Input/Output”功能的 header 信息,“ ”包含“内存 Allocation/Freeing”功能的 header 信息。

一个有一组函数声明、常量、宏和类型定义,另一个有不同的组函数声明、常量、宏和类型定义。如果您想查看内容,可以使用简单的文本编辑器打开该文件。


stdio代表标准input/output,其内容通常但不限于与输入输出操作有关,与硬件或物理设备或与系统支持的文件有关。可用的函数声明、宏和类型定义列表 can be found here:

函数:

  • 对文件的操作:

    • 删除 - 删除文件

    • 重命名 - 重命名文件

    • tmpfile - 打开一个临时文件

    • tmpnam - 生成临时文件名

  • 文件访问:

    • fclose - 关闭文件

    • fflush - 刷新流

    • fopen - 打开文件

    • freopen - 使用不同的文件或模式重新打开流

    • setbuf - 设置流缓冲区

    • setvbuf - 更改流缓冲

  • 格式化input/output:

    • fprintf - 将格式化数据写入流

    • fscanf - 从流中读取格式化数据

    • printf - 打印格式化数据到标准输出

    • scanf - 从标准输入读取格式化数据

    • snprintf - 将格式化输出写入大小缓冲区

    • sprintf - 将格式化数据写入字符串

    • sscanf - 从字符串中读取格式化数据

    • vfprintf - 将可变参数列表中的格式化数据写入流

    • vfscanf - 从流中读取格式化数据到可变参数列表

    • vprintf - 将可变参数列表中的格式化数据打印到标准输出

    • vscanf - 将格式化数据读入可变参数列表

    • vsnprintf - 将可变参数列表中的格式化数据写入大小缓冲区

    • vsprintf - 将可变参数列表中的格式化数据写入字符串

    • vsscanf - 从字符串中读取格式化数据到可变参数列表

  • 字符input/output:

    • fgetc - 从流中获取字符

    • fgets - 从流中获取字符串

    • fputc - 将字符写入流

    • fputs - 将字符串写入流

    • getc - 从流中获取字符

    • getchar - 从标准输入获取字符

    • gets - 从标准输入获取字符串

    • putc - 将字符写入流

    • putchar - 将字符写入标准输出

    • puts - 将字符串写入标准输出

    • ungetc - 从流中提取字符

  • 直接input/output:

    • fread - 从流中读取数据块

    • fwrite - 将数据块写入流

  • 文件定位:

    • fgetpos - 获取流中的当前位置

    • fseek - 重新定位流位置指示器

    • fsetpos - 设置流的位置指示器

    • ftell - 获取流中的当前位置

    • rewind - 将流的位置设置为开头

  • 错误处理:

    • clearerr - 清除错误指示器

    • feof - 检查文件结束符

    • ferror - 检查错误指示器

    • perror - 打印错误信息

宏:

  • BUFSIZ - 缓冲区大小

  • EOF - 文件结束

  • FILENAME_MAX - 文件名的最大长度

  • FOPEN_MAX - 同时打开流的潜在限制

  • L_tmpnam - 临时文件名的最小长度

  • NULL - 空指针(宏)

  • TMP_MAX - 临时文件数

  • 另外:_IOFBF、_IOLBF、_IONBF(与setvbuf一起使用) 和 SEEK_CUR、SEEK_END 和 SEEK_SET(与 fseek 一起使用)。

类型:

  • FILE - 包含控制流的信息的对象

  • fpos_t - 对象包含指定文件中位置的信息

  • size_t - 无符号整数类型


stdlib代表标准库,它具有通用功能,包括动态内存管理、随机数生成、通信、算术、搜索、排序和转换等。函数声明、宏和类型定义可用 can be found here:

函数

  • 字符串转换

    • atof - 将字符串转换为双精度

    • atoi - 将字符串转换为整数

    • atol - 将字符串转换为长整数

    • atoll - 将字符串转换为长整数

    • strtod - 将字符串转换为双精度

    • strtof - 将字符串转换为浮点数

    • strtol - 将字符串转换为长整数

    • strtold - 将字符串转换为 long double

    • strtoll - 将字符串转换为长整数

    • strtoul - 将字符串转换为无符号长整数

    • strtoull - 将字符串转换为无符号长整数

  • 伪随机序列生成

    • rand - 生成随机数

    • srand - 初始化随机数生成器

  • 动态内存管理

    • calloc - 分配和零初始化数组

    • free - 释放内存块

    • malloc - 分配内存块

    • realloc - 重新分配内存块

  • 环境

    • abort - 中止当前进程

    • atexit - 设置退出时执行的函数

    • at_quick_exit - 设置函数在快速退出时执行

    • exit - 终止调用进程

    • getenv - 获取环境字符串

    • quick_exit - 快速终止调用进程

    • system - 执行系统命令

    • _Exit - 终止调用进程

  • 搜索和排序

    • bsearch - 数组中的二进制搜索

    • qsort - 对数组元素进行排序

  • 整数运算

    • abs - 绝对值

    • div - 积分 division

    • labs - 绝对值

    • ldiv - 积分 division

    • llabs - 绝对值

    • lldiv - 积分 division

  • 多字节字符

    • mblen - 获取多字节字符的长度

    • mbtowc - 将多字节序列转换为宽字符

    • wctomb - 将宽字符转换为多字节序列

  • 多字节字符串

    • mbstowcs - 将多字节字符串转换为宽字符字符串

    • wcstombs - 将宽字符字符串转换为多字节字符串

宏常量

  • EXIT_FAILURE - 失败终止代码

  • EXIT_SUCCESS - 成功终止代码

  • MB_CUR_MAX - 多字节字符的最大大小

  • NULL - 空指针

  • RAND_MAX - rand

    返回的最大值

类型

  • div_t - div

    返回的结构
  • ldiv_t - ldiv

    返回的结构
  • lldiv_t - lldiv

    返回的结构
  • size_t - 无符号整数类型

它们有不同的内容。

C 标准库分为几个主要区域,每个区域都有一个单独的头文件。

stdio.h(标准 I/O)包含处理文本和二进制的例程的宏定义、类型定义和函数声明 I/O(printfscanffopengetchar 等)。

stdlib.h(标准库)包含处理内存管理、文本到数字转换、随机数等例程的宏定义、类型定义和函数声明。(malloccallocstrtolrand 等)。

stdio.h

C库执行Input/Output操作 输入和输出操作也可以在C++中使用C标准输入和输出库(cstdio,在C语言中称为studio.h)进行。该库使用流来操作物理设备,例如键盘、打印机、终端或系统支持的任何其他类型的文件。流是与这些统一交互的抽象;所有流都具有相似的属性,独立于物理媒体的个体特征。

流在 cstdio 库中作为指向 FILE 对象的指针进行处理。指向 FILE 对象的指针唯一标识一个流,并在涉及该流的操作中用作参数。

还存在三个标准流:stdin、stdout 和 stderr,它们是为使用该库的所有程序自动创建和打开的。

stdlib.h

库(标准库)提供了解决各种问题的函数。首先,这个库将允许您通过在堆中分配或释放内存来动态管理内存。它还将使您能够与程序所在的操作系统进行交互 运行。该库还提供了许多其他实用函数,用于在数据类型、算法(排序、二分搜索、伪随机数生成等)和其他一些可能性之间进行转换。