在C中调用fwrite函数后如何检查是否成功写入?

how check successfully write after invoke fwrite function in C?

我在网站上找到这段代码:

    struct person 
{
    int id;
    char fname[20];
    char lname[20];
};
  
int main ()
{
    FILE *outfile;
      
    // open file for writing
    outfile = fopen ("person.dat", "w");
  
    struct person input1 = {1, "rohan", "sharma"};
      
    // write struct to file
    fwrite (&input1, sizeof(struct person), 1, outfile);

     if(fwrite != 0) 
        printf("contents to file written successfully !\n");

    return 0;
}

  1. if(fwrite != 0) 正确吗?
  2. 我们可以比较函数名本身吗(fwrite)?
  3. 在这种情况下 fwrite 的值是多少?

不,这绝对不是正确的做法。正确的做法是:

if(fwrite(&input1, sizeof(struct person), 1, outfile)) != 1) {
    /* Error writing */
}

但是为了避免重复的幻数,这样会更好:

size_t num = 1;
if(fwrite(&input1, sizeof(struct person), num, outfile)) != num) {

我很难相信任何网站会发布这样的垃圾代码。我知道 geeksforgeeks 不是很值得信赖,但这非常糟糕。在很多层面上都是错误的。

if(fwrite != 0) 是一个完全没有意义的检查。如果 fwrite != 0 的计算结果为 false,则意味着对 fwrite 的函数调用将失败。检查基本上意味着“fwrite 是一个空指针吗?”如果一个库函数是一个空指针,那肯定是有问题的。

fwrite returns写入的元素个数,在本例中应该是一个元素。

我之前写了一个 ,但现在我需要将 geeksforgeeks 添加到我建议远离的资源列表中。