Strings
Strings definieren
Strings in C sind eigentlich Arrays von Zeichen. Obwohl Zeiger in C ein fortgeschrittenes Thema ist, dass später behandelt wird, werden wir Zeiger für unseren Zeichenarray benutzen. Und zwar folgendermaßen:
char * name = "John Smith";
Mit dieser Methode erstellen wir einen String den wir nur lesen können. Wollen wir einen String definieren, der auch verändert werden kann, müssen wir ihn als lokalen Zeichenarray definieren:.
char name[] = "John Smith";
Diese Notation ist anders, da es eine Array Variable alloziert, die wir verändern können. Die leeren eckigen Klammern []
sagen dem Compiler,
dass er die benötigte Größe des Arrays automatisch berechnen soll. Das ist dasselbe, als wenn man die Größe explizit angeben würde (1 mehr als die Länge des Strings):
the length of the string:
char name[] = "John Smith";
/* ist dasselbe wie */
char name[11] = "John Smith";
Der Grund dass wir 1 hinzufügen müssen ist, dass, obwohl der String John Smith
genau 10 Zeichen lang ist, wir ein extra Zeichen
für den String Terminator einplanen müssen. Der String Terminator ist ein spezielles Zeichen, das das Ende des Strings anzeigt.
Dies ist notwendig, da das Programm nicht weiß, wie lang der String ist. Das weiß nur der Compiler.
String formatieren mit printf
Wir können die printf
Funktion benutzen, um einen String mit anderen Strings in ein bestimmtes Format zu bringen:
char * name = "John Smith";
int age = 27;
/* gibt 'John Smith ist 27 Jahre alt.' aus */
printf("%s ist %d Jahre alt.\n", name, age);
Beachte, dass wir beim ausgeben von Strings ein 'newline' Zeichen hinzufügen müssen, sodass der nächste printf
Aufruf auf einer neuen Zeile anfängt.
String Vergleiche
Die Funktion strncmp
vergleicht zwei Strings und gibt 0 zurück, wenn beide gleich sind, oder eine andere Zahl, wenn sie unterschiedlich sind.
Die Argumente sind die beiden Strings, die verglichen werden sollen und die maximale Länge, die verglichen werden soll. Es gibt ebenfalls eine unsichere
Version dieser Funktion namens strcmp
, aber es wird stark von ihr abgeraten. Zum Beispiel:
char * name = "John";
if (strncmp(name, "John", 4) == 0) {
printf("Hallo, John!\n");
} else {
printf("Du bist nicht John. Verschwinde!\n");
}
Übung
Definieren einen String first_name
mit dem Wert John
mit der Zeigernotation und definiere einen String last_name
mit dem Wert Doe
mit der lokalen Arraynotation.