Zeichenkette
Eine Zeichenkette ist eine Folge von Zeichen (Buchstaben, Sonderzeichen, Leerzeichen sind Zeichen) aus einem vorab definierten Zeichensatz.
Zeichen können sich in einer Zeichenkette wiederholen, die Reihenfolge der Zeichen ist definiert.
Der String ist ein besondere Form des Datentyp Array. Genauer gesagt ist ein String ein Array, das Character (Zeichen von 0..255) enthalten kann.
Mit Zeichenkette wird in der Programmierung ebenfalls ein Datentyp bezeichnet, der Zeichenketten (Texte) variabler Länge enthalten kann. Fast jede Programmiersprache besitzt einen derartigen Datentyp, meist wird er mit dem englischen Namen String bezeichnet.
Manche Programmiersprachen arbeiten ausschließlich mit diesem Datentyp: Beispiele sind sed, awk und bash.
Beispiele
AWK:
BEGIN { getline number getline base print number " = " convert(number, base) } function convert (n, b) { nstart = n z = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" conv = ")" substr(z, (b + 1), 1) while (n > 0) { p = n % b conv = substr(z, (p + 1), 1) conv n = ((n - (n % b)) / b) } conv = "(" conv return conv
Die Programmiersprache C
Eine Zeichenkette in C ist ein Array vom Typ char, wobei die Zeichenkette als Endezeichen das ASCII-Zeichen NUL enthält. Deswegen heißen solche Zeichenketten auch NUL-terminiert. Da das NUL Zeichen selbst auch noch einen Speicherplatz benötigt, den die Zeichenkette belegt, ist der Speicherbedarf einer Zeichenkette immer mindestens 1 Zeichen größer als die nutzbare Länge der Zeichenkette. Als "Länge der Zeichenkette" wird die Anzahl der Zeichen vor dem Endezeichen bezeichnet. Sie wird von der C-Funktion strlen() ermittelt.
Beispiel in C
Ein C-Programm definiert zwei Zeichenketten-Variablen mit 4 Zeichen Länge und weist beiden den gleichen Wert (Inhalt) zu: Um das NUL-Zeichen abzuspeichern, muss man Arrays mit 5 Zeichen deklarieren.
int main(int argc, char** argv) { char[5] text1; char[5] text2;
strcpy ( text1, "Test" ); strcpy ( text2, text1 );
return 0; }
Beispiel in Perl
Zum Vergleich das Gleiche in Perl
$text = "Test"; $text2 = $text;
Anmerkungen
Zu den häufigsten Fehlerquellen und damit zu der häufigsten Angriffsquelle auf Server zählen buffer overflows: Es wird versucht, einer Zeichenkettenvariablen einen String zuzuweisen, dessen Länge die Länge der Variablen übersteigt. Dadurch werden andere, benachbarte Variablen im Speicher überschrieben. Bei geschickter Ausnutzung dieses Effekts kann ein auf einem Server laufendes Programm manipuliert und für Angriffe auf den Server mißbraucht werden. Zur sicheren Programmierung sollten Zeichenketten-Operationen nur mit Funktionen durchgeführt werden, bei denen die maximale Länge der Zeichenkette überprüft wird.
In C wären das Funktionen wie z.B. strncpy(), snprintf()... (anstelle von strcpy(), sprints(), ...)