meisterqui-gonjinn
Goto Top

Strcmp() fkt. nicht

Hoffe, dass ich im richtigen Forum gelandet bin...
Möchte gerne zwei Dateien öffnen und vergleichen.
Die Dateien werden auch geöffnet. Nicht wundern ich habe mir die eingelesenen Strings ausgeben lassen, um herauszufinden was strcmp() überhaupt vergleicht.
Jetzt meine Fragen:
1. Warum wird die while-Schleife nicht richtig ausgewertet? (compare wird viermal ausgeführt, obwohl es nur jeweils zwei Zeilen in den beiden .txt-Dateien gibt)
2. Warum gibt fgets() zwei Mal so einen kryptischen String aus?


Konsole:

Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.
 
Satz2: (ç a*]ì axì a�ÕÍ"  
Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz. 
Satz2: (ç a*]ì axì a�ÕÍ"  
Unterschiedliche Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz. 
Satz2: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.

Identische Datensaetze
Satz1: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz. 
Satz2: Dies ist der erste Satz.Dies ist der erste Satz.Dies ist der erste Satz.


Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXSTRING 81

/*
 * 
 */
int main() {
    
    FILE *d1_ptr, *d2_ptr;
    char compare1[MAXSTRING], compare2[MAXSTRING];

 if((d1_ptr=fopen("c:\\compare\\t1.txt","r"))==NULL || (d2_ptr=fopen("c:\\compare\\t2.txt","r"))==NULL)  
            {
                perror("Fehler beim öffnen der Datei");  
                exit(2);
            }
        else
            {
                while (fgets(compare1, MAXSTRING, d1_ptr)!=NULL || fgets(compare2, MAXSTRING, d2_ptr)!=NULL)
                {
                    if ((strcmp(compare1, compare2))==0)
                    {
                        printf("Identische Datensaetze");  
                        printf("\nSatz1: %s \nSatz2: %s\n", &compare1, &compare2);  
                    }
                    else
                    {
                        printf("Unterschiedliche Datensaetze");  
                        printf("\nSatz1: %s \nSatz2: %s\n", &compare1, &compare2);  
                    }
                }
            }

Content-ID: 174957

Url: https://administrator.de/contentid/174957

Ausgedruckt am: 26.11.2024 um 10:11 Uhr

dog
dog 19.10.2011 um 22:13:00 Uhr
Goto Top
1. Warum wird die while-Schleife nicht richtig ausgewertet?

Weil die C-Auswertung Lazy ist.
Oder anders gesagt: Wenn die erste Bedingung in einem ODER wahr ist dann ist es auch egal was mit der Zweiten ist.
Entsprechend wird zuerst nur die linke Datei und danach die rechte ausgelesen.

2. Warum gibt fgets() zwei Mal so einen kryptischen String aus?

Weil du deine Variablen nicht sauber initialisierst und irgendwo durch den RAM wilderst...

&compare1

Ist übrigens quatsch. Eine Variable auf einen Array ist immer ein Pointer.
Das funktioniert bei dir überhaupt nur weil manche Compiler die Eigenschaft haben den Fehler "auszukorrigieren".