1

ferror这个例子中的 check 检查两个s是否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);
}
4

1 回答 1

2

如果发生错误,除非在您的流上调用它,否则它不会被重置clearerr,所以是的,两个写入中的任何一个发生的错误都会被记录下来。

来自ferror 手册页

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

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

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

( fprintf 手册页)

像这样(感谢乔纳森指出原帖中的错误):

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!");
于 2016-11-29T21:55:41.053 回答