Betriebstechnik | Biographien | Biologie | Chemie | Deutsch | Digitaltechnik |
Electronica | Epochen | Fertigungstechnik | Gemeinschaftskunde | Geographie | Geschichte |
Informatik | Kultur | Kunst | Literatur | Management | Mathematik |
Medizin | Nachrichtentechnik | Philosophie | Physik | Politik | Projekt |
Psychologie | Recht | Sonstige | Sport | Technik | Wirtschaftskunde |
Ähnliche Berichte:
|
Projekte:
|
Papers in anderen sprachen:
|
informatik referate |
Häufige Fehlerursachen in C
Titel
Fehler:
1.Allgemeine
2.Arrays
3.Strings
4.Zeiger
5.Funktionen
6.Typen
1. Fehler allgemeiner Art
Erklärung: == .. Vergleichsoperator = Zuweisungsoperator Beispiel int i; if (i = 5)
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!
Beispiel: x = ++i; // x erhält den neuen Wert von i x = i++; // x erhält den alten Wert von i
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
Beispiel
switch(i)
Achtung: In Fällen von trickreichen Algorithmen kann das break auch absichtlich weggelassen werden!
2. Fehler bei Arrays
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
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!
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!
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
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
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.
Beispiel int zahl; scanf(' %d ', zahl); //Falsch! es wird ein Zeiger erwartet! scanf(' %d ',&zahl); //Richtig!
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
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
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!
Referate über:
|
Datenschutz |
Copyright ©
2024 - Alle Rechte vorbehalten AZreferate.com |
Verwenden sie diese referate ihre eigene arbeit zu schaffen. Kopieren oder herunterladen nicht einfach diese # Hauptseite # Kontact / Impressum |