是否会发生多次写入?

时间:2016-11-29 21:48:50

标签: c printf runtime-error ferror

此示例中的ferror是否检查fprintf是否有错误,或仅检查第二个?

FILE * myout;
if ((myout = fopen("Assignment 11.txt", "a")) != NULL)
{
    fprintf(myout, "First print ", str1);  
    fprintf(myout, "Second print", str1);

    if (ferror(myout))
        fprintf(stderr, "Error printing to file!");

    fclose(myout);
}

1 个答案:

答案 0 :(得分:2)

如果发生错误,除非在您的流上调用clearerr,否则不会重置错误,所以是的,会记录两次写入中发生的错误。

来自ferror manual page

  

函数ferror()测试stream指向的流的错误指示符,如果设置则返回非零值。错误指示器只能通过clearerr()函数重置。

但您也可以使用fprintf返回代码查看是否出现问题:

  

如果遇到输出错误,则返回负值。

fprintf manual page

喜欢这个(感谢Jonathan指出原帖中的错误):

if (fprintf(myout, "First print %s\n", str1)<0) fprintf(stderr, "Error printing to file #1!");
if (fprintf(myout, "Second print %s\n", str1)<0) fprintf(stderr, "Error printing to file #2!");