正如标题所说,我需要比较两个文件。如果有一行出现,这两个文件之间不相同,请打印该行(从两个文件中)。代码给出了不发送错误。我似乎无法找到我的代码中的错误。
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(int argc, char *argv[]) {
char c1, c2;
char s1[MAX], s2[MAX];
char *p1;
char *p2;
FILE *fp1;
FILE *fp2;
fp1 = fopen(argv[1], "r");
fp2 = fopen(argv[2], "r");
p1 = s1;
p2 = s2;
if (argc != 3) {
printf("Wrong use of program \n ");
return -1;
}
if (fp1 == NULL || fp2 == NULL) {
printf("One or both of the files can't be used \n ");
return -1;
}
while ((c1 = getc(fp1)) != EOF || (c2 = getc(fp2)) != EOF) {
*p1 = c1;
*p2 = c2;
p1++;
p2++;
for (c1 = getc(fp1); c1 != '\n'; p1++) {
*p1 = c1;
}
*p1 = '\0';
for (c2 = getc(fp2); c2 != '\n'; p2++) {
*p2 = c2;
}
*p2 = '\0';
if (!(strcmp(s1, s2))) {
printf("%s \n ", s1);
printf("%s \n ", s2);
return 0;
}
}
return 0;
}
最佳答案
如果这两个文件是文本文件,那么老实说,我会从头开始使用一个更简单的程序,该程序使用 fgets() 而不是 getc(),并使用 strcmp() 而不是逐字符进行逐行比较。代码中存在太多错误 - 如果您放弃已有的内容并使用更简单的解决方案重新开始,您将更快地完成任务。
顺便说一句,如果两个字符串相同,则 strcmp 返回零;如果两个字符串不同,则返回非零。
关于比较c中的两个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455242/