Announcement

Collapse
No announcement yet.

c: strcmp() von zwei Strings fkt. nicht

Collapse
This topic is closed.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • c: strcmp() von zwei Strings 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:
    Code:
    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:
    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);
                        }
                    }
                }

  • #2
    Schon mal debuggt?
    Warum liest du mehr Bytes ein 81, als du Zeichen hat 73?
    Endet die Textdatei mit einem NullByte? Eher nicht
    Christian

    Comment


    • #3
      Code:
      int main() {
          
          FILE *d1_ptr, *d2_ptr;
          char compare1[MAXSTRING], compare2[MAXSTRING];
      
               if((d1_ptr=fopen("c:\\compare\\t1.txt","r"))==NULL)
                  {
                      perror("Fehler beim öffnen der Datei");
                      exit(2);
                  }
               else if((d2_ptr=fopen("c:\\compare\\t2.txt","r"))==NULL)
               {
                      perror("Fehler beim öffnen der Datei");
                      exit(3);
               }
              else
                  {
                 
                      while (fgets(compare1, MAXSTRING, d1_ptr)!=NULL)
                      {
      
                          fgets(compare1, MAXSTRING, d1_ptr);
                          fgets(compare2, MAXSTRING, d2_ptr);
                          printf("%s\n%s\n", &compare1, &compare2);
                          if (strcmp(compare1, compare2)==0)
                          {
                              printf("Identische Datensaetze");
                              
                          }
                          else
                          {
                              printf("Unterschiedliche Datensaetze");
                              
                          }
                      }
                  }
      Jetzt funzts. Gruß und gelöst

      Comment


      • #4
        Das sollte nicht funktionieren:

        while (fgets(compare1, MAXSTRING, d1_ptr)!=NULL)
        {
        fgets(compare1, MAXSTRING, d1_ptr);
        Christian

        Comment


        • #5
          http://www.system-administrator.eu/i...content=174957

          geschlossen
          Christian

          Comment

          Working...
          X