Christian Kruse: C - Zeigerfrage Array

Beitrag lesen

Moin Mechthild,

Bemerkenswert hierbei ist, dass C die Größe der Elemente automatisch beim inkrementieren berücksichtigt. Das obere Beispiel funktioniert folglich auch, wenn ein Zeichen in der Zeichenkette mehrere Bytes belegen würde. Also angenommen ein Zeichen bräuchte zwei Bytes. Dann müsstest du, um das 'c' zu erreichen eigentlich zwei mal die Datengröße von 2 Bytes auf die Startadresse addieren. C weiß aber, dass ein Element in der Zeichenkette zwei Bytes belegt und kann diese Berechnung automatisch vornehmen. Das heißt *(Startadresse + 2) dereferenziert die Adresse, an der das Low-Byte des Zeichen 'c' abgespeichert. Beim Dereferenzieren wird wiederum Rücksicht auf die Datengröße genommen und man erhält die zwei Byte große Zeichenkette 'c'.

Das probiere ich heute abend mal aus... hört sich interessant an. Wenn ich also ein Dokument als utf-8 kodiere und eine Zeichenkette "aä" wähle, die folglich 3 Bytes lang ist, dann sollte das funktionieren. Teste ich mal.

Nein, da hast du etwas missverstanden. Auch wenn du dein Dokument in utf-8 kodierst, ist der interne Datentyp char in C immer noch 1 byte lang (auf gängiger Hardware). Und deshalb wird ein char \*ptr = "aä"; ++ptr; danach immer noch auf das erste Byte der UTF-8-Sequenz zeigen.

LG,
 CK