Text in einer Variablen
Bisher haben deine Variablen Zahlen und einzelne Zeichen enthalten. Programme arbeiten aber ständig mit Text: Namen, Nachrichten, Passwörter. In der Programmierung heißt ein Stück Text Zeichenkette (englisch string), denn es ist eine Kette von Zeichen, eines nach dem anderen, wie Perlen an einer Schnur.
C hat keinen besonderen Datentyp für Text. Eine Zeichenkette ist einfach ein Array aus Zeichen, ein Array vom Typ char. Du erstellst sie so:
char name[] = "Anna";Der Text steht in doppelten Anführungszeichen. Die eckigen Klammern bleiben leer, der Compiler zählt also die Größe des Arrays für dich, genau wie bei einem Array aus Zahlen. Wie viele Elemente hat das Array? Der Text hat 4 Buchstaben, aber das Array hat 5 Elemente:
Index: 0 1 2 3 4
char: 'A' 'n' 'n' 'a' '\0'Das letzte Element, '\0', ist das Nullzeichen: ein Backslash und eine Null in einfachen Anführungszeichen, denn es ist ein einziges Zeichen. In der Ausgabe siehst du es nicht; sein Wert ist die Zahl 0. Es markiert die Stelle, an der der Text endet, und der Compiler hängt es an jeden Text in doppelten Anführungszeichen von selbst an. Warum braucht man es? Nichts anderes sagt printf und den anderen Funktionen, wo der Text endet (und später in dieser Lektion siehst du Texte, die kürzer sind als ihr Array). Sie gehen also eine Zeichenkette Zeichen für Zeichen durch, bis sie das '\0' erreichen.
Um eine Zeichenkette auszugeben, verwende den Formatbezeichner %s (s für string). Schreibe nach dem Formatstring den Namen des Arrays, ohne eckige Klammern:
char name[] = "Anna";
printf("Hallo, %s!\n", name);Das gibt Folgendes aus:
Hallo, Anna!printf gibt die Zeichen von name eines nach dem anderen aus und hört beim '\0' auf. Dank dieser Endmarke lässt sich eine Zeichenkette auf einmal ausgeben, ein Array aus Zahlen dagegen nicht.
Achte auf die Anführungszeichen. Einfache Anführungszeichen enthalten ein Zeichen vom Typ char: 'A'. Doppelte enthalten eine Zeichenkette: "A" ist ein Array aus zwei Zeichen, 'A' und '\0'. Wenn du sie verwechselst, lässt sich das Programm nicht kompilieren:
char buchstabe = "A";main.c:4:10: error: incompatible pointer to integer conversion initializing 'char' with an expression of type 'char[2]' [-Wint-conversion]Die Meldung spricht von Zeigern, die du später im Kurs kennenlernst. Wichtig ist char[2]: Dort, wo ein char hingehört, hast du ein Array aus zwei Zeichen angegeben. Wenn du diese Meldung siehst, prüfe deine Anführungszeichen.
Ein weiterer häufiger Fehler ist printf(name);. Es sieht einfacher aus, aber das Programm lässt sich nicht kompilieren:
char name[] = "Anna";
printf(name);main.c:5:12: error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]printf nimmt immer das Erste in seinen Klammern als Formatstring, die Anweisung, was und wie ausgegeben wird. Würde der Name ein % enthalten, behandelte printf es als Formatbezeichner. Gib eine Zeichenkette also immer über %s aus: printf("%s\n", name);.
So schreibst du es:
Anweisungen
- 1
Erstelle unter der Willkommenszeile eine Zeichenkette
spielermit dem Text"Luke"und gib sie mit%saus, sodass die Ausgabe die ZeileSpieler: Lukeenthält. - 2
Wie viele Elemente hat das Array
spieler? Speichere daruntersizeof(spieler)in einerint-Variablengroesseund gib sie aus:Größe: 5.sizeofliefert die Größe in Bytes, und eincharbelegt genau ein Byte, bei einem Array aus Zeichen ist es also die Anzahl der Elemente. Warum 5, wenn der Name nur 4 Buchstaben hat?