C语言输入输出全解析
1. 输入输出概述
在编程中,程序需要具备向文件或物理输出设备(如显示器、打印机)写入数据,以及从文件或输入设备(如键盘)读取数据的能力。C标准库为此提供了众多函数,这些用于输入输出的部分通常被称为I/O库。所有输入输出的基本函数、宏和类型都在头文件 stdio.h
中声明,而对于宽字符类型 wchar_t
的输入输出函数声明则包含在头文件 wchar.h
中。
C11引入了许多新的函数,作为传统标准I/O函数的替代方案,这些新函数允许更安全的编程,特别是在复制数据时会检查数组的边界。这些替代函数的名称以后缀 _s
结尾,例如 scanf_s()
。支持这些“安全”函数是可选的,在提供这些函数的实现中会定义宏 __STDC_LIB_EXT1__
。
2. 流的概念
从C程序的角度来看,所有用于输入输出的文件和设备都统一表示为逻辑数据流,无论程序是一次读写一个字符、字节,还是文本行或给定大小的数据块。C语言中的流可以是文本流或二进制流,不过在某些系统中,这两者的区别可能并不存在。
通过 fopen()
(或 tmpfile()
)函数打开文件会创建一个新的流,该流会一直存在,直到使用 fclose()
函数将其关闭。C语言将文件管理交给执行环境,也就是程序运行的系统。因此,流是数据从执行环境流向程序,或从程序流向其环境的通道。像控制台这样的设备,其处理