检查零字节

时间:2013-11-24 19:41:32

标签: c function fread

我已经制作了一段代码,用于检查512字节块中的零。我遇到的一个问题是,如果我建立一个签入,它似乎没有检查所有字节,这里是代码:

int zerocheck(FILE *fp,unsigned long long seekpoint)
{
    int j;

    if(fseek(fp,seekpoint,SEEK_SET)==0)
    {
        char buf[seekwidth],cmp[seekwidth];

        if(fread(buf,sizeof buf,1,fp)==1)
        {
            for (j=0;j<seekwidth;j++)
            {
                printf("%i\n!!!\n",buf[j]);

                if (buf[j]!=0)
                    return 1;
                else
                    return 0;
            }
        }
    }

    return 2;
}

打印就在那里进行调试。问题是,如果检查零,它似乎没有正确检查所有字节。我可以从印刷品中看到,如果我有1,它会打印出1!但是一旦我添加if语句之后它就不打印出1并且没有返回正确的值。我不知道如何解决它......

为了记录这发生了什么我有一个文件,我知道第二个字节是1.如果我删除:

                if (buf[j]!=0)
                    return 1;
                else
                    return 0;

它正确读取并给出了这个:

检查文件是否为零... 0 ! 1 ! 0

但如果包含if语句,则这是输出: 检查文件为零... 0 ! 0 ! 0

打印不是真正的问题,但重要的是每个字节都要检查......

1 个答案:

答案 0 :(得分:2)

你只检查第一个字节,然后立即返回一个或零!如果它是零,正如预期的那样,你需要继续下一个字节。

尝试删除两行:

else
    return 0;

然后替换最终:

return 2;

return 0;

然后,如果整个块为零,则函数将返回零;如果块为非零,则返回1。