我已经制作了一段代码,用于检查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
打印不是真正的问题,但重要的是每个字节都要检查......
答案 0 :(得分:2)
你只检查第一个字节,然后立即返回一个或零!如果它是零,正如预期的那样,你需要继续下一个字节。
尝试删除两行:
else
return 0;
然后替换最终:
return 2;
与
return 0;
然后,如果整个块为零,则函数将返回零;如果块为非零,则返回1。