REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Haufige Fehlerursachen in C



Häufige Fehlerursachen in C




1. Fehler allgemeiner Art



  • Verwechslung von == und =

Erklärung:     == .. Vergleichsoperator        = Zuweisungsoperator Beispiel        int i;        if (i = 5)



  • Verwechslung von ' und '

Erklärung:     ' Begrenzung eines einzelnen Zeichens        ' Begrenzung einer Zeichenkette Beispiel        char zeichen, zeichenkette[6];        zeichen = 'z';        // richtig!        zeichen = 'z';        // falsch!        strcpy(zeichenkette,'test');  // richtig!        strcpy(zeichenkette,'test');  // falsch!

  • Verwechslung der Stellung von In/Dekrement-Operatoren

Beispiel:      x = ++i;  // x erhält den neuen Wert von i        x = i++;  // x erhält den alten Wert von i

  • Kontrollstrukturen

Strichpunkte hinter einer Kontrollanweisung (if, for, while) entsprechen einer Leeranweisung.

Beispiel        for (int i=0; i<10; i++);           printf('%i',i);      // i wird nur einmal ausgegeben

  • Fehlendes break im switch-Statement

Beispiel

       switch(i)

Achtung: In Fällen von trickreichen Algorithmen kann das break auch absichtlich weggelassen werden!

2. Fehler bei Arrays



  • Bereichsüberschreitung

In C beginnen Arrays mit dem Index 0, hingegen bei der Vereinbarung wird die Anzahl der Elemente des Arrays angegeben.

Beispiel      int feld[100];           // Index von 0 bis 99

     for (int i = 1; i<=100; i++)     // Der Arraybereich wird überschritten

  • Arrays als Parameter Arrays werden immer als Zeiger auf das erste Element übergeben.

Beispiel

     void test (char name[6])

Beachte: Diese Funktion gibt die Zeigergröße (je nach Speichermodell 2 bzw. 4) und nicht die Arraygröße aus!


3. Fehler bei der Stringbehandlung


Grundsätzlich treten bei der Verwendung von Strings, bedingt durch deren gleiche Implementierung, die selben Fehler wie bei Arrays auf!

  • nicht abgeschlossene Strings In C werden Strings als Arrays von einzelnen Zeichen abgespeichert. Das Ende des Strings wird durch eine Abschlußnull (ASCII 0) definiert. Fehlt diese Null wird das Stringende von Stringfunktionen nicht erkannt!

Beispiel          char t1[5]='test';          char t2[6];

strncpy(t2, t1, 2);   // String t2 is nicht durch eine Null abgeschlossen          Printf('%s',t2);      // gibt den String und den gesammten Speicherinhalt                // bis zur ersten ASCII 0 aus!

  • Vergleich bzw. Zuweisung

Erklärung:   == . Vergleicht Adressen, nicht die Inhalte      = .. setzt Adresse um, kopiert nicht die Inhalte

=> Vergleichen von Inhalten mit strcmp => Zuweisen von Inhalten mit strcpy

Beispiel

      char name1[5]='test';       char name2[5]='test';       char *name3;



      name3 = name1;       if (name1 == name2)              // => FALSE       if (name1 == name3)              // => TRUE       if (strcmp(name1, name2) == 0)     // => TRUE

  • Unterschied zwischen Leerstring und NULL

Der Leerstring entspricht einem Character-Array bei dem das 1. Element ASCII 0 ist. NULL ist eine Konstante, die angibt, daß ein Zeiger den Wert 0 hat.

Beispiel     char *x1 = NULL;  // Zeiger hat den Wert 0     char *x2 = '';    // Zeiger zeigt auf eine Speicherstelle in dem 0 steht



4. Fehler bei Zeigern



  • nicht initialisierte Zeiger

Zeiger zeigen vor der Initialisierung auf irgendeine Adresse im Speicher, daher müssen sie vor ihrer Verwendung immer initialisiert werden bzw. Speicher muß reserviert werden!

Beispiel      char feld[10];      char *s1;      char *s2 = feld;

     strcpy (s1, 'Text');   // falsch      strcpy (s2, 'Text');   // richtig




5. Fehler bei Funktionsaufrufen


In C gibt es grundsätzlich keine Var-Parameter. Daher müssen Var-Parameter 'künstlich' durch Zeiger erzeugt werden.

  • Funktionsaufruf stimmt mit der Vereinbarung nicht überein

Beispiel     int zahl;     scanf(' %d ', zahl);  //Falsch! es wird ein Zeiger erwartet!     scanf(' %d ',&zahl);  //Richtig!

  • Der Funktionsaufruf ist richtig, die Bedeutung jedoch falsch

Beispiel      Falsch:         int *zahl;         scanf('%d', zahl);   // Zeiger ist nicht initialisiert!

     Richtig:         int zahl, *pzahl;         pzahl = &zahl;         scanf('&d', pzahl);



6. Fehler bei der Typkonvertierung


  • Ausdrücke

Werden Variablen underschiedlichen Typs einander zugewiesen, so laufen automatische Konvertiermechanismen ab.

Ergebnistyp ist vom Operandentyp abhängig!

Beispiel     float f;     int i1, i2;     long l; f=1/5;        // f erhält den Wert 0 anstatt 0.2     l=i1*i2       // Überlauf wenn 32767 überschritten wird

  • Char und Int Konvertierung

Grundsätzlich kann mit Char- wie mit Int-Werten gerechnet werden. Bei der Ausgabe gibt es jedoch Unterschiede.

Beispiel     char zeichen;     zeichen = 'ä';           // ASCII 132     printf('%d', zeichen);   // Ausgabe: -124

Lösung: zeichen als unsigned char vereinbaren!










Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen







Neu artikel