C语言问题,比较两个文件的字节数

我们需要检查 2 个文件是否包含相同的字节编写一个 C 程序,它接受两个参数,都是文件名。如果两个文件不同compare_file.c,无论它们是否不同, 都应该打印第一个字节的位置。使用与以下示例相同的格式。如果一个文件比另一个文件短,但它包含的字节与另一个文件相同,compare_file.c则应打印一条消息指示这一点。使用与以下示例相同的格式。如果这 2 个文件包含完全相同的字节,compare_file.c则应打印一条消息来指示这一点。再次使用与以下示例相同的格式。下面有机翻

img

img

代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char ch1,ch2;
    int i= 0;
    FILE* fp1,*fp2;
    if(argc != 3)
    {
        printf("参数不符合要求");
        return 0;
    }
    
    //打开文件
    if( (fp1 = fopen(argv[1],"r")) ==0)
    {
        printf("文件1打开失败\n");
        return 0;
    }

    if( (fp2 = fopen(argv[2],"r")) ==0)
    {
        printf("文件2打开失败\n");
        return 0;
    }

    while( (!feof(fp1))&&(!feof(fp2))  )
    {
        fread(&ch1,1,1,fp1);
        fread(&ch2,1,1,fp2);
        if(ch1 != ch2)
        {
            printf("Files differ at byte %d\n",i);
            fclose(fp1);fclose(fp2);
            return 0;
        }
        i++;
    }
    if (feof(fp1) && feof(fp2))
    {
        printf("Files are identical\n");
    }else if ( feof(fp1) && (!feof(fp2)) )
    {
        printf("EOF on %s\n",argv[1]);
    }else if ( (!feof(fp1))&& feof(fp2))
    {
        printf("EOF on %s\n",argv[2]);
    }
    fclose(fp1);
    fclose(fp2);
    return 0;
}


fopen打开两个文件,fread读取所有数据到字符数组。然后逐个字符进行比较,如果找到不相同字符,则打印第一个不同字符出现的位置;如果遍历万两个文件,没有出现不同字符,但某个文件还有剩余字节,则打印提示信息;如果完全相同,则提示文件相同