我们需要检查 2 个文件是否包含相同的字节编写一个 C 程序,它接受两个参数,都是文件名。如果两个文件不同compare_file.c,无论它们是否不同, 都应该打印第一个字节的位置。使用与以下示例相同的格式。如果一个文件比另一个文件短,但它包含的字节与另一个文件相同,compare_file.c则应打印一条消息指示这一点。使用与以下示例相同的格式。如果这 2 个文件包含完全相同的字节,compare_file.c则应打印一条消息来指示这一点。再次使用与以下示例相同的格式。下面有机翻
代码如下:
#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读取所有数据到字符数组。然后逐个字符进行比较,如果找到不相同字符,则打印第一个不同字符出现的位置;如果遍历万两个文件,没有出现不同字符,但某个文件还有剩余字节,则打印提示信息;如果完全相同,则提示文件相同