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
|