Strings in C?

4 Antworten

Hatten wir diese Frage nicht schon, zumindest fast dieselbe, mit vielen guten Antworten?

Am Index 0 findet sich logischerweise genau ein char ('D'). Aber direkt danach sind in einem durchgängigen Speicherbereich die restlichen Zeichen zu finden, bis zum terminierenden 0. So funktionieren Arrays, und in C sind Strings ebensolche.


LuisBuzZ 
Fragesteller
 02.10.2020, 13:38

Das habe ich mir gedacht.

Warum wird dann dennoch der gesammte string ausgegeben und nicht nur das D?

0
alfredo153  02.10.2020, 13:39
@LuisBuzZ

Weil du printf mit dem Formatstring %s sagst, dass das Argument danach ein String ist. Und so gibt es ein Zeichen nach dem anderen aus, bis es auf das Nullbyte trifft.

Probier mal andere Formatstrings, du wirst interessante Effekte sehen. Oder gib ihm mit demselben Formatstring einen Pointer auf int oder was anderes.

2
alfredo153  02.10.2020, 13:53

Und dass es hier zu keinen Missverständnissen kommt: nicht jedes Array in C ist nullterminiert. Das ist nur eine Konvention für Strings, die nun mal unterschiedliche Längen zu haben pflegen.

0

Die Variable string vom Typ char * speichert die Adresse des ersten Zeichens vom gesamten String.

Jedes Zeichen des Strings ist ein Byte. Jedes Byte im Speicher hat eine Adresse.

Der String wird so abgelegt, dass an der Adresse string das 'D' steht. An der Adresse um 1 höher das nächste Zeichen, hier das 'a'. Und so weiter.

Was man nicht sieht, aber wissen muss: C fügt am Ende jedes Strings noch ein weiteres Byte mit dem Zahlenwert 0 an. Das %s beim printf heißt, dass nacheinander alle Zeichen aus aufeinanderfolgenden Speicheradressen ausgegeben werden, bis die Schleife auf ein 0-Byte trifft.

An Index 0 ist das 'D'.

...

An Index 15 ist das '!'.

An Index 16 ist das 0-Byte. In C als '\0' anzugeben.

Jein.

Die gesamte Zeichenkette liegt im virtuellen Adressraum an der Stelle, auf die der Pointer verweist.

Mit Aufruf per Index dereferenzierst du allerdings den Pointer und erhälst lediglich das entsprecehnde Zeichen der zeichenkette zurück. An einen bestimmten Index liegt also an sich immer nur ein Zeichen.

An Index Nummer 0 steht 'D', an Stelle 1 'a' usw.

C-Strings sind nichts weiter als Char-Arrays.