Häufige Fehlerursachen in C
Referatsaufbereitung von Michael Thell
Referatsquellen von Thomas Gartner und Michaela Marder
(keine Ahnung von wo die beiden abgeschrieben haben)
Titel
Fehler: 1.Allgemeine 2.Arrays 3.Strings 4.Zeiger 5.Funktionen 6.
Typen
1. Fehler allgemeiner Art
Verwechslung von == und =
Erklärung: == .....
Vergleichsoperator
= ......
Zuweisungsoperator
Beispiel:
int i;
...
if (i = 5) { //i = 5 ist eine Zuweisung, immer TRUE!
...
}
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) {
case 1: Printf("eins"); break; // Ausgabe: eins
case 2: Printf("zwei"); // Ausgabe: zweidrei
case 3: Printf("drei"); break; // Ausgabe: drei
}
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
{
printf("%i",feld[i]);
...
}
Arrays als Parameter
Arrays werden immer als Zeiger auf das erste Element übergeben.
Beispiel:
void test (char name[6])
{
printf("%i",sizeof(name));
}
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.
Anmerkungen: |
| impressum | datenschutz
© Copyright Artikelpedia.com