C 语言读取文本文件及简单格式化处理
C语言中,基本输入输出只需要包含
stdio.h
一个头文件即可,包含了标准输入输出系列 stdin,stdout,stderr ,以及通用文件操作支持,窄字符输入输出基本操作相关函数。
文件读取
I/O 流是 FILE 类型对象,只能通过 FILE*
类型指针访问及操作。每个流与外部物理设备(文件、标准输入流、打印机、序列端口等)关联。
FILE* 指针结构
在系统指定的需要访问设备的信息(例如 POSIX 文件描述符)外,每个流对象保有下列信息:
- (C95)字符宽度:未设置、窄或宽。
- 缓冲状态:无缓冲、行缓冲、全缓冲。
- 缓冲区,可为外部的用户提供缓冲区所替换。
- I/O 模式:输入、输出或更新(兼具输入与输出)。
- 二进制/文本模式指示器。
- 文件尾指示器。
- 错误状态指示器。
- 文件位置指示器( fpos_t 类型对象),对于宽字符流包含剖析状态( mbstate_t 类型对象(C95))。
- (C11)在多个线程读、写、寻位或查询流时避免数据竞争的再入锁。
二进制与文本模式
文本流是被组合进行(零或更多字符加上终止的 ‘\n’ )的有序字符序列。最后一行是否要求终止的 ‘\n’ 是实现定义的。可能必须在输入与输出时添加、切换或删除字符,以符合 OS 中的表示文本(尤其是 Windows OS 上的 C 流在输出时将 \n 转换为 \r\n ,输入时将 \r\n 转换为 \n )。
二进制流是能通透地记录内部数据的有序字符序列。从二进制流读取的数据始终与先前写出到该流者比较相等。仅允许实现后附一些空字符到流结尾。宽二进制流不必终止于初始迁移状态。
POSIX 实现不辨别文本与二进制流(无 \n 或任何其他字符的特殊映射)。
文件访问相关函数
打开文件:
FILE *fopen( const