fwrite()将未知零置

时间:2015-02-27 21:49:39

标签: c file fwrite

我在C.中使用fwrite()时有一个奇怪的问题。在用整数编辑文件后,我得到零(" 0")之前我的最后一个元素是由fwrite()添加的。我的练习是将文件中的整数除以10个或更少元素的组。

例如,我有:  {2, 3, 9, 4, 6, 7, 5, 87, 65,12, 45, 2, 3, 4, 5, 6, 7, 8, 9}

编辑后我需要: {2, 3, 9, 4, 6, 7, 5, 87, 65, 12, 87, 45, 2, 3, 4, 5, 6, 7, 8, 9, 45 };

使用下面的代码我得到: {2, 3, 9, 4, 6, 7, 5, 87, 65, 12, 87, 45, 2, 3, 4, 5, 6, 7, 8, 9, 0, 45 }; 在逐步调试的过程中, fwrite()只能运行两次,它在前10个元素之后会有87个,而在剩下的之后会有45个.Zero没有被fwrite()写入。是吗那么?从哪里来呢?

我的代码:

while (!feof(fp)) {

        fread(&elems[k], sizeof(int), 1, fp);
        fwrite(&elems[k], sizeof(int), 1, hp);
        ++k;

        if (k == 10 || feof(fp)){
            for (i = 0; i < 10; ++i){
                if (elems[i] > max_number){
                    max_number = elems[i];
                }
            }
            fwrite(&max_number, sizeof(int), 1, hp);
            for (i = 0; i < 10; ++i){
                elems[i] = 0;
            }
            max_number = INT_MIN;
            k = 0;
        }

    }

感谢答案!

1 个答案:

答案 0 :(得分:1)

  • 使用feof会导致阅读额外的项目。
  • 必须检查来自fwritefread来电的错误。
    • 一个可能的错误是EOF错误。
    • 如果fread返回0个项目,则该值将保留为之前的值。可能是0.这可能是你的额外0来自哪里。