Vergleichen von zwei Dateien in c

Wie der Titel sagt, brauche ich zum vergleichen von 2 Dateien.Wenn eine Zeile kommt ,dass ist nicht das gleiche zwischen diesen 2 Dateien,print, Online (Von beiden Dateien).Der code gibt keine Fehler senden.Ich kann nicht scheinen, um in der Lage sein den Fehler in meinem code.

#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;
}
  • Ein nicht senden Fehler?
  • Kompilieren mit allen Warnungen und debugging-Informationen (z.B. gcc -Wall -g auf Linux) und lernen, wie Sie den debugger verwenden (z.B. gdb auf Linux).
  • Für den Anfang, ich würde mich der Suche an, wo ordnen Sie die Zeichenfolgen zu s1 und s2.
  • Was ist Los mit 2 fgets() und ein strcmp() im while - Schleife?
  • Sie wollen wahrscheinlich sowohl s1 und s2 beim start mit memset. Verwenden Sie dann den debugger (Schritt für Schritt), um Sie anzuzeigen. Beachten Sie, dass Ihr Programm nicht auf Dateien arbeiten, die mit großen Linien (mit mehr als 1000 Zeichen in einer Zeile). Denken Sie daran, dass sich der source-code kompiliert, ist der einfache Teil, das Debuggen ist der eigentliche Spaß.
  • ok, werde versuchen, dass zuerst.Das Programm wird kompiliert,habe nicht versucht, zu Debuggen, obwohl es
  • Auch überlegen, was passieren wird, wenn Sie Ihre Datei entweder endet Sie in einem single-line-feed, oder eine Linie, die ist nicht beendet mit einem line-feed...
  • Noch wichtiger ist, welche Art nicht fgetc zurück? int... Was ist der Bereich der möglichen Werte zurückgeben? [ EOF, 0..UCHAR_MAX ]. Unter der Annahme char signiert ist, kann es darstellen UCHAR_MAX? Angenommen char ist unsigned, wird (c2 = getc(fp2)) != EOF jemals falsch sein? Bitte, verwenden Sie einfach einen int zu speichern den Rückgabewert von getc.

InformationsquelleAutor Lind | 2013-03-16
Schreibe einen Kommentar