Menu
Coddy logo textTech

Rückblick: String-Wrapper

Teil des Abschnitts Objektorientierte Programmierung der C-Journey von Coddy. Lektion 16 von 61.

challenge icon

Aufgabe

Einfach

Erstelle ein StringObject-Modul, das ein dynamisch reserviertes Zeichenarray kapselt. Diese Wiederholungsaufgabe führt den vollständigen Lebenszyklus eines Objekts, den Konstruktor, die schreibgeschützte Methode und den Destruktor zusammen, die alle gemeinsam für eine sichere Speicherverwaltung sorgen.

Du erstellst drei Dateien:

  • stringobj.h: Deklariere eine StringObject-Struktur mit einem einzigen Member: char *text (ein Zeiger auf eine dynamisch reservierte Zeichenkette). Deklariere außerdem drei Funktionen:
    • create_string: nimmt einen const char *-Eingabewert entgegen und gibt einen Zeiger auf ein neu reserviertes StringObject zurück
    • print_string: nimmt einen const StringObject * entgegen und gibt den gespeicherten Text aus
    • free_string: nimmt einen StringObject * entgegen und gibt den gesamten reservierten Speicher frei
    Verwende Include-Guards mit dem Symbol STRINGOBJ_H.
  • stringobj.c: Implementiere alle drei Funktionen. Dein Konstruktor sollte Speicher für die Struktur reservieren, anschließend Speicher für den Text reservieren (denke an strlen plus eins für das Nullzeichen) und die Eingabezeichenkette kopieren. Dein Destruktor muss in umgekehrter Reihenfolge freigeben: zuerst den internen text-Puffer, dann die Struktur selbst. Füge zur Sicherheit eine NULL-Prüfung in deinen Destruktor ein.
  • main.c: Verwende dein Modul, um ein Stringobjekt zu erstellen, seinen Inhalt auszugeben und anschließend ordnungsgemäß aufzuräumen.

Du erhältst eine Eingabe: eine Textzeichenkette, die in deinem StringObject gespeichert werden soll.

Erstelle in deiner Hauptdatei ein StringObject mit dem bereitgestellten Text, gib seinen Inhalt aus, gib den Speicher frei und gib anschließend eine Bestätigungsnachricht aus.

Die Funktion print_string sollte in diesem Format ausgeben:

Text: {text}

Gib nach dem Freigeben Folgendes aus:

Freed

Beispielsweise würde die Ausgabe bei der Eingabe Hello World folgendermaßen aussehen:

Text: Hello World
Freed

Probier es selbst

#include <stdio.h>
#include "stringobj.h"

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Zeilenumbruch entfernen, falls vorhanden
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Create a StringObject with the input text
    
    // TODO: Gib den String mit print_string aus
    
    // TODO: Free the StringObject using free_string
    
    // TODO: Gib "Freed" aus, um die Bereinigung zu bestätigen
    
    return 0;
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C-Compiler