将文件与C进行比较

将文件与C进行比较,c,file,C,File,我正在尝试编写一个代码来比较两个文件,并显示它们是否相等 #include <stdio.h> #include <stdlib.h> int main(){ FILE *f1, *f2; int diff = 0; char c1, c2, name_f1[100], name_f2[100]; printf("File1: "); fgets(name_f1, 100, stdin);

我正在尝试编写一个代码来比较两个文件,并显示它们是否相等

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

int main(){
    
    FILE *f1, *f2;
    int diff = 0;
    char c1, c2, name_f1[100], name_f2[100];

    printf("File1: ");
    fgets(name_f1, 100, stdin);

    printf("File2: ");
    fgets(name_f2, 100, stdin);

    f1 = fopen(name_f1, "r+");
    f2 = fopen(name_f2, "r+");
    
    do{
        c1 = fgetc(f1);
        c2 = fgetc(f2);

        if (c1 != c2){
            diff = 1;
        }
    }while(c1 != EOF && c2 != EOF);

    fclose(f1);
    fclose(f2);

    if(diff==1){
        printf("Files are different");
    }else{
        printf("Files are the same");
    }

    return 0;
}

#包括
#包括
int main(){
文件*f1,*f2;
int-diff=0;
字符c1,c2,名称_f1[100],名称_f2[100];
printf(“文件1:”);
fgets(名称为f1,100,标准名称);
printf(“文件2:”);
fgets(名称,100,标准名称);
f1=fopen(名称为“r+”);
f2=fopen(名称为“r+”);
做{
c1=fgetc(f1);
c2=fgetc(f2);
如果(c1!=c2){
差异=1;
}
}而(c1!=EOF&&c2!=EOF);
fclose(f1);
fclose(f2);
如果(差异==1){
printf(“文件不同”);
}否则{
printf(“文件相同”);
}
返回0;
}
但它一直告诉我它们是一样的,即使它们不是,我也不知道为什么 另外,如果fopen只是用于读取(“r”),它会返回分段错误,我也不知道为什么会发生这种情况


非常感谢您的帮助。

您描述的行为可能表明您试图打开的文件不存在,因为如果文件不存在,则“r”返回null,但“r+”创建了一个文件*,这似乎可以解释分段错误。
因此,程序返回的文件相同也是合理的,因为两个创建的文件都是空的。 也许你的路径不正确

提示:始终检查
fopen
是否成功,失败时退出


*如图所示:

您描述的行为可能表明您试图打开的文件不存在,因为如果文件不存在,则“r”返回null,但“r+”创建了一个文件*,这似乎可以解释分段错误。
因此,程序返回的文件相同也是合理的,因为两个创建的文件都是空的。 也许你的路径不正确

提示:始终检查
fopen
是否成功,失败时退出


*如图所示:

文件的第一部分是否相同?如果您先点击一个EOF,则它们的大小不同,并且根据定义也不相同。你也可以提前检查,在这种情况下避免循环。此外,与您的问题无关,您可以在看到差异时立即打破循环。始终,真正始终检查
fopen
是否失败。绝对没有理由不这样做。你可能想学习的源代码的灵感。您需要阅读C编译器(例如…)和调试器(例如…)的文档文件的第一部分是否相同?如果您先点击一个EOF,则它们的大小不同,并且根据定义也不相同。你也可以提前检查,在这种情况下避免循环。此外,与您的问题无关,您可以在看到差异时立即打破循环。始终,真正始终检查
fopen
是否失败。绝对没有理由不这样做。你可能想学习的源代码的灵感。您需要阅读C编译器(例如…)和调试器(例如…)的文档