fscanf之后为什么fprintf没有工作?

时间:2010-08-19 06:03:42

标签: scanf printf

我想打开一个文件进行写作和阅读,但在我读完之后,我无法写信:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

C99§7.19.5.3fopen()函数

  

以更新模式打开文件时('+'作为第二个或第三个字符)   在上面的模式参数值列表中,输入和输出都可以在上面执行   相关流。但是,如果没有输入,输出不应直接输入   干预调用fflush函数或文件定位函数(fseek,   fsetpos,或倒带),输入不应该直接跟随输出没有   干预调用文件定位功能,除非输入操作遇到结束   文件。