比较c中的两个文件

标签 c file compare argv argc

正如标题所说,我需要比较两个文件。如果有一行出现,这两个文件之间不相同,请打印该行(从两个文件中)。代码给出了不发送错误。我似乎无法找到我的代码中的错误。

#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/

相关文章:

c - linux共享c库不共享

ios - 快速从 iOS 应用导出文件

java - 获取当前用户的路径而不是java中的应用程序路径

java - 用java获取文件的第一行

python - 根据所选键比较 2 个字典列表,无需 for 循环

MYSQL 如何比较字符串

c - MaxMin 矩阵组合

c - 在 C 中处理时区

c - Travis-CI 上的 GTK2 链接错误

java - 比较 Java 7 中的 Object 和 int