【问题标题】:how check successfully write after invoke fwrite function in C?在 C 中调用 fwrite 函数后如何检查成功写入?
【发布时间】:2021-07-15 22:16:31
【问题描述】:

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

    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 的值是多少?

【问题讨论】:

  • C 编译器可以回答所有问题。
  • 感兴趣的网站是什么
  • 这段代码被破坏了,实际上并没有检查写入是否成功。我建议查看fwrite 的手册页。
  • 我在这里找到了代码:geeksforgeeks.org/readwrite-structure-file-c
  • 我对此表示赞同,因为我认为指出出现此类垃圾代码的网站是件好事

标签: c fwrite


【解决方案1】:

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

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 的计算结果为假,则意味着对fwrite 的函数调用将失败。检查基本上意味着“fwrite 是空指针吗?”如果一个库函数是一个空指针,那就大错特错了。

fwrite 返回写入元素的数量,在这种情况下应该是一个元素。

我之前写过 rant about Tutorialspoint,但现在我需要将 geeksforgeeks 添加到我建议远离的资源列表中。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2019-03-18
    • 2023-03-03
    • 2020-08-23
    • 2016-07-19
    • 2012-08-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多