前言
找工作的时候,曾经用C语言练习过一段时间的算法题目,也在几个还算出名的OJ平台有过还算靠谱的排名。之前以为C语言只限于练习一下算法,但是工作中的一个问题解决让我意识到C语言的用处还是非常广泛的。下面介绍一下,如果用C语言来操作文件保存一个字符串,和读取一个字符串。算法中往往都是printf来打印出结果,但是真实工作中往往通过文件来进行一些持久化的存储工作。
C-File I/O
文件的I/O操作是每一门语言的重点,因此这里我先来介绍一下如何用C语言去进行文件的I/O操作。
文件和流
就C语言程序而言,所有的I/O操作只是简单地从程序移进或移出字节的事情。因此,这种字节流便被称为流(stream)。程序只需要关心创建正确的输出字节数据,以及正确地解释从输入读取的字节数据。特定I/O设备的细节对程序员是隐藏的。绝大多数流是完全缓冲的(fully buffered),这意味着“读取”和“写入”实际上是从一块被称为缓冲区(buffer)的内存区域来回复制数据。从内存中来回复制数据是非常快速的。用于输出流的缓冲区只有当它写满时才会被刷新(flush,物理写入)到设备或文件中。一次性把写满的缓冲区写入和逐片把程序产生的输出分别写入相比效率更高。输入缓冲区也是类似的原理。
流分为两种类型,分别是文本流和二进制流。
打开流和关闭流
fopen函数打开一个特定的文件,并把一个流和这个文件相关联。它的原型如下所示:
FILE* open(const ch