Menu
CoddyTech

Rangkuman: Pembungkus string

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 16 dari 61.

challenge icon

Tantangan

Mudah

Mari buat module StringObject yang membungkus array karakter yang dialokasikan secara dinamis. Tantangan rangkuman ini menggabungkan seluruh siklus hidup object, constructor, method hanya-baca, dan destructor yang bekerja bersama untuk mengelola memori dengan aman.

Kamu akan membuat tiga file:

  • stringobj.h: Deklarasikan struct StringObject dengan satu anggota: char *text (pointer ke string yang dialokasikan secara dinamis). Deklarasikan juga tiga fungsi:
    • create_string: menerima input const char * dan mengembalikan pointer ke StringObject yang baru dialokasikan
    • print_string: menerima const StringObject * dan menampilkan teks yang tersimpan
    • free_string: menerima StringObject * dan membebaskan semua memori yang dialokasikan
    Gunakan include guard dengan simbol STRINGOBJ_H.
  • stringobj.c: Implementasikan ketiga fungsi. Constructor-mu harus mengalokasikan memori untuk struct, lalu mengalokasikan memori untuk teks (ingat, strlen ditambah satu untuk terminator null), lalu menyalin string input. Destructor-mu harus membebaskan memori dengan urutan terbalik: buffer internal text terlebih dahulu, lalu struct itu sendiri. Sertakan pemeriksaan NULL dalam destructor untuk keamanan.
  • main.c: Gunakan module-mu untuk membuat object string, menampilkan isinya, lalu membersihkan memori dengan benar.

Kamu akan menerima satu input: string teks untuk disimpan dalam StringObject.

Di file utama, buat StringObject dengan teks yang diberikan, tampilkan isinya, bebaskan memorinya, lalu cetak pesan konfirmasi.

Fungsi print_string harus menghasilkan output dengan format ini:

Text: {text}

Setelah membebaskan memori, cetak:

Freed

Misalnya, dengan input Hello World, outputnya akan seperti ini:

Text: Hello World
Freed

Coba sendiri

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Hapus karakter baris baru jika ada
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Buat StringObject dari teks input
    
    // TODO: Cetak string menggunakan print_string
    
    // TODO: Bebaskan StringObject menggunakan free_string
    
    // TODO: Cetak "Freed" untuk memastikan pembersihan selesai
    
    return 0;
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online