【问题标题】:Why doesn't fprintf work after fscanf?为什么 fscanf 之后 fprintf 不起作用?
【发布时间】:2010-08-19 06:03:41
【问题描述】:

我想打开一个文件进行写入和读取,但读取后无法写入:

f_prefs = fopen(prefs_path, "r+");
while (fscanf(f_prefs, "%[^\n]\n", line) == 1)
{
    ... do some stuff ...
    fprintf(f_prefs, "test"); // doesn't work
    ...
}

有什么想法吗?

【问题讨论】:

    标签: scanf printf


    【解决方案1】:

    在方向上的每个开关之间必须有一个文件定位操作——从读到写或从写到读。如有疑问,请使用fseek(fp, 0, SEEK_CUR);,它从当前位置寻找零字节。请注意,循环中需要两个 fseek() 操作!

    C99 §7.19.5.3 fopen() 函数

    当以更新模式打开文件时('+' 作为第二个或第三个字符 以上模式参数值列表),输入和输出都可以在 关联的流。但是,输出不得直接跟在输入后面没有 干预对 fflush 函数或文件定位函数(fseek, fsetpos,或倒带),并且输入不应直接跟在没有输出的情况下 干预对文件定位函数的调用,除非输入操作遇到 end-of- 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2016-04-19
      • 2017-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      相关资源
      最近更新 更多