C/C++-Grundlagen

Arrays und Strings in C und C++

In dieser Lektion durchläufst du ein Array fester Größe und bestimmst in C und C++ sicher die Länge eines Strings.

Einführung

Ein Array ist eine Folge von Elementen desselben Typs, die direkt hintereinander im Speicher liegen. In C ist ein String ein Zeichenarray, das mit dem Nullzeichen '\0' endet. In C++ verwaltet std::string dagegen seinen Speicher selbst und kennt immer die Länge des Texts.

Wichtige Punkte

  • Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
  • Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
  • Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.

So funktioniert es

Ein C-String ist ein Array aus Zeichen, das mit '\0' endet. Klicke auf ein Zeichen, um Index und Speicheradresse zu sehen.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>
#include <string.h>

int main(void) {
    int values[] = {3, 5, 8, 13};
    char name[] = "Ada";
    size_t count = sizeof values / sizeof values[0];
    printf("%s: %zu values, %zu letters\n", name, count, strlen(name));
    return 0;
}
Ergebnis der Ausführung
Ada: 4 values, 3 letters
C++
Code ausführen →
main.cpp
#include <array>
#include <iostream>
#include <string>

int main() {
    std::array values{3, 5, 8, 13};
    std::string name = "Ada";
    std::cout << name << ": " << values.size()
              << " values, " << name.size() << " letters\n";
}
Ergebnis der Ausführung
Ada: 4 values, 3 letters

C und C++ im Vergleich

Der Ausdruck sizeof values / sizeof values[0] berechnet die Elementanzahl eines Arrays, das in derselben Funktion deklariert ist, funktioniert aber nicht mit einem Array, das als Zeiger an eine Funktion übergeben wurde. Die Funktion strlen muss jedes Zeichen bis zum '\0' durchgehen, um die Länge zu kennen, während std::string::size() die Länge sofort liefert.

C

C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.

C++

C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.

Übungen zur Vertiefung

Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.

  • Teste ungültige Eingaben und Grenzwerte.
  • Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
  • Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.

Mit einer Challenge üben

Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.

Alle Challenges