Kapitel 5 Unit 3 von 5 Theorie + Übungen Dauer: ~45 Min.
Ömer
Ömer sagt:

Strings in C sind char-Arrays – eine Folge von Zeichen, am Ende ein Nullzeichen \0. Das ist der wichtigste Unterschied zu anderen Sprachen. Ohne \0 weiß C nicht wo der String endet! 📝

char-Array als String Das Nullzeichen \0 String deklarieren String einlesen mit scanf Strings ausgeben mit printf

📝 Strings in C – char-Arrays

Ein String ist ein char-Array, das mit dem Nullzeichen '\0' (ASCII 0) endet. Dieses Zeichen markiert das Ende des Strings:

char name[7] = "Ömer" (5 Zeichen + \0 + Reserveplatz)
O
[0]
e
[1]
m
[2]
e
[3]
r
[4]
\0
[5]
?
[6]
Arraygröße muss mindestens: Anzahl Zeichen + 1 (für \0) sein!
strings.cC
#include <stdio.h>
int main() {
    /* Verschiedene Deklarationen */
    char name1[20] = "Oemer";      // mit String-Literal
    char name2[] = "HTL";         // Größe automatisch: 4
    char name3[10];               // leer, zum Einlesen

    /* String einlesen – KEIN & bei scanf! */
    printf("Name eingeben: ");
    scanf("%s", name3);           // kein &, liest bis Leerzeichen

    /* String ausgeben */
    printf("Hallo, %s!\n", name1);
    printf("Schule: %s\n", name2);
    printf("Du: %s\n", name3);
    return 0;
}

⚠️ Wichtige Regeln für Strings

RegelRichtigFalsch / Problem
Größe mit \0char s[6] = "Hallo";char s[5] = "Hallo"; ← kein Platz für \0!
scanf ohne &scanf("%s", name);scanf("%s", &name); ← falsch
Zuweisungstrcpy(ziel, quelle);ziel = quelle; ← funktioniert nicht!
Vergleichstrcmp(a, b) == 0a == b ← vergleicht Adressen!

💡 scanf("%s") liest nur bis zum Leerzeichen

Für Namen mit Leerzeichen (z.B. "Max Mustermann") benutze:
scanf("%19s", name); – mit maximaler Länge zur Sicherheit, oder
fgets(name, 20, stdin); – liest die ganze Zeile

✏️ Übungen

Übung 1

Arraygröße bestimmen

Wie groß muss das char-Array mindestens sein?

  1. String "Hallo" → mindestens _______ Zeichen
  2. String "Informatik" → mindestens _______ Zeichen
  3. String "C" → mindestens _______ Zeichen
  4. Leerer String "" → mindestens _______ Zeichen
Anzahl der Buchstaben + 1 für das \0-Zeichen!
Übung 2

String zeichenweise lesen

Schreibe ein Programm, das einen String einliest und jeden Buchstaben mit seinem Index ausgibt (bis \0 erreicht wird):

#include <stdio.h> int main() { char wort[50]; printf("Wort eingeben: "); scanf("%s", wort); /* Zeichenweise mit for ausgeben */ for (int i = 0; wort[i] != '\0'; i++) { printf("[%d] = '%c'\n", i, wort[i]); } return 0; }
Übung 3 – Programm

Begrüßung

Schreibe ein Programm, das den Vornamen einliest und eine personalisierte Begrüßung ausgibt. Nutze %s für den String:

#include <stdio.h> int main() { char vorname[30]; /* Eingabe und Begrüßung */ return 0; }
Übung 4 – Bonus

Vokale zählen

Schreibe ein Programm, das einen eingegebenen String zeichenweise durchläuft und die Anzahl der Vokale (a, e, i, o, u – groß und klein) zählt:

#include <stdio.h> int ist_vokal(char c) { return (c=='a'||c=='e'||c=='i'||c=='o'||c=='u'|| c=='A'||c=='E'||c=='I'||c=='O'||c=='U'); } int main() { char satz[100]; int vokale = 0; printf("Satz eingeben: "); /* fgets liest auch Leerzeichen ein */ fgets(satz, sizeof(satz), stdin); for (int i = 0; satz[i] != '\0'; i++) { if (ist_vokal(satz[i])) vokale++; } printf("Anzahl Vokale: %d\n", vokale); return 0; }
fgets(satz, size, stdin) liest eine ganze Zeile inkl. Leerzeichen ein – besser als scanf("%s") für Sätze. Die Schleife endet beim Null-Terminator \0.