为什么fread无需指定下一个读取位置就能连续读取文件字节?
这是因为C标准库的FILE类型结构体内部默认维护了一个文件位置指示器,所有面向FILE流的读写操作都会自动更新这个指示器:
- 调用
fread从输入流读取数据时,每成功读取N个字节,输入流对应的位置指示器就会自动向后偏移N个字节,下次调用fread就会从偏移后的新位置开始读取。你当前的代码每次读取1个char,所以每执行一次fread,input流的位置指示器就+1,下次自动读取下一个字节。 - 调用
fwrite向输出流写入数据时,每成功写入N个字节,输出流对应的位置指示器也会自动向后偏移N个字节,下次写入就从新位置开始。
如果你需要手动调整读写位置,可以用fseek、rewind、ftell等标准库函数操作这个内置的位置指示器,比如要从文件开头偏移10个字节的位置开始读取,可以调用fseek(input, 10, SEEK_SET)实现。
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

