C 查找两个文件不同的所有字节位置

C 查找两个文件不同的所有字节位置,c,comparison,C,Comparison,通过下面的代码,我能够比较两个文件并找到它们不同的起始位置,但现在我想找到它们不同的所有位置并打印出来,而不仅仅是第一个位置。我知道这是一个循环,但我不知道怎么做循环。我认为,保持while循环不变并使用break语句会起作用,但事实并非如此。 我如何称呼它: if ((fp1 != NULL) && (fp2 != NULL)){ compare_two_binary_files(fp1, fp2);

通过下面的代码,我能够比较两个文件并找到它们不同的起始位置,但现在我想找到它们不同的所有位置并打印出来,而不仅仅是第一个位置。我知道这是一个循环,但我不知道怎么做循环。我认为,保持while循环不变并使用break语句会起作用,但事实并非如此。 我如何称呼它:

            if ((fp1 != NULL) && (fp2 != NULL)){
                compare_two_binary_files(fp1, fp2);
                }
如何实施:

void compare(FILE *f1, FILE *f2)
{
    char ch1, ch2;
    int flag = 0;

while (((ch1 = fgetc(f1)) != EOF) &&((ch2 = fgetc(f2)) != EOF)){
    if (ch1 == ch2)
    {
        flag = 1;
        continue;
    }
    /*
     * If not equal then returns the byte position
     */
    else
    {
        fseek(f1, -1, SEEK_CUR);
        flag = 0;
        printf("Byte pos where two files differ is %d\n", ftell(f1)+1);
    break;
    }
}
}试试看

int count = 0;
while (((ch1 = fgetc(f1)) != EOF) &&((ch2 = fgetc(f2)) != EOF)){
    if (ch1 != ch2)
    {
        printf("Byte pos where two files differ is %d\n", count);
    }
    count++;
}

为什么标志变量在那里??当你移除中断并尝试时,你得到了什么输出??中断结束了你的while循环。移除它。您也不需要continue语句。使用fseek-1和ftell+1似乎不必要的复杂性。