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-Key: 174957

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

Printed on: April 18, 2024 at 06:04 o'clock

Member: dog
dog Oct 19, 2011 at 20:13:00 (UTC)
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".