基础知识 | 每日一练(116)

  • 2019 年 10 月 4 日
  • 筆記

础知识练习
学生:我想用 “r+” 打开一个文件, 读出一个字符串, 修改之后再写入,

从而就地更新一个文件。可是这样不行。

小林:确保在写操作之前先调用 fseek, 回到你准备覆盖的字串的开始, 况且在读写“+” 模式下的读和写操作之间总是需要 fseek 或 fflush。同时, 记住改写同样数量的字符, 而且在文本模式下改写可能会在改写处把文件长度截断, 因而你可能需要保存行长度。

学生:一旦使用 freopen() 之后, 怎样才能恢复原来的 stdout (或stdin)?

小林:没有什么好办法。如果你需要恢复回去, 那么最好一开始就不要使用 fre-open()。可以使用你自己的可以随意赋值的输出 (输入) 流变量, 而不要去动原来的输出 (或输入) 流。有一种不可移植的办法, 可以在调用 freopen() 之前保存流的信息, 以便其后恢复原来的流。一种办法是使用系统相关的调用如 dup(), dup2() 等。另一种办法是复制或查看 FILE 结构的内容, 但是这种方法完全没有可移植性而且很不可靠。

Exit mobile version