Zeichenketten verbinden
Oft musst du einen Text aus Teilen zusammensetzen: einen Vornamen und einen Nachnamen, eine Begrüßung und einen Namen. Die Funktion strcat (string concatenate, also verketten) aus string.h hängt einen Text an das Ende des Textes an, der schon in einem Array steht:
char voller_name[30] = "Anna";
strcat(voller_name, " ");
strcat(voller_name, "Schmidt");
printf("%s\n", voller_name);Das gibt Folgendes aus:
Anna Schmidtstrcat findet das '\0' am Ende von voller_name und kopiert den neuen Text dorthin, einschließlich seines eigenen '\0'. Die Reihenfolge ist dieselbe wie bei strcpy: zuerst das Array, das sich ändert, dann der Text, der angehängt wird. Der zweite Text bleibt, wie er war.
Ein üblicher Anfang ist eine leere Zeichenkette, "", die nur das '\0' enthält, an die du die Teile einen nach dem anderen anhängst. In einer Schleife ist das praktisch:
char sterne[10] = "";
for (int i = 0; i < 3; i++) {
strcat(sterne, "*");
printf("%s\n", sterne);
}Das gibt Folgendes aus:
*
**
***Das Array muss Platz für alles haben: den Text, der schon darin steht, den neuen Text und ein '\0'. "Anna Schmidt" braucht 4 + 1 + 7 + 1 = 13 Elemente, voller_name[30] ist also mehr als genug. Wie bei strcpy lässt sich das Programm hier nicht kompilieren, wenn Clang sehen kann, dass der neue Text nicht passt:
char gruss[8] = "Hallo";
strcat(gruss, ", Leute!");main.c:6:5: error: 'strcat' will always overflow; destination buffer has size 8, but the source string has length 9 (including NUL byte) [-Werror,-Wfortify-source]Clang prüft aber nur den neuen Text. Wenn das Array schon teilweise gefüllt ist, sieht es das Problem oft nicht, und strcat schreibt kommentarlos hinter das Ende des Arrays. Rechne also vor dem Verbinden nach, wie viel Platz du brauchst, und mach das Array im Zweifel größer.
So schreibst du es:
Anweisungen
- 1
Verbinde vor dem letzten
printfmit dreimalstrcatvorname, ein Leerzeichen undnachnameinvoller_name. Die Ausgabe sollName: Tom Beckerlauten. - 2
Erstelle darunter
char lachen[20] = "";und hänge in einerfor-Schleife, die 4-mal läuft, jeweils"ha"an. Gib es nach der Schleife aus:hahahaha.