Menu
Coddy logo textTech

Özet: String Wrapper

Coddy'nin C Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 16 / 61.

challenge icon

Görev

Kolay

Dinamik olarak ayrılmış bir karakter dizisini saran bir StringObject modülü oluşturalım. Bu tekrar alıştırması, belleği güvenli bir şekilde yönetmek için birlikte çalışan eksiksiz nesne yaşam döngüsünü, oluşturucuyu, salt okunur yöntemi ve yok ediciyi bir araya getirir.

Üç dosya oluşturacaksın:

  • stringobj.h: Tek bir üyeye sahip bir StringObject yapısı bildir: char *text (dinamik olarak ayrılmış bir dizeye işaretçi). Ayrıca üç işlev bildir:
    • create_string: bir const char * girdisi alır ve yeni ayrılmış bir StringObject'a işaretçi döndürür
    • print_string: bir const StringObject * alır ve depolanan metni görüntüler
    • free_string: bir StringObject * alır ve ayrılmış tüm belleği serbest bırakır
    STRINGOBJ_H sembolüyle include guard kullan.
  • stringobj.c: Üç işlevin tümünü uygula. Oluşturucun önce yapı için bellek ayırmalı, ardından metin için bellek ayırmalı (null sonlandırıcı için strlen değerine bir eklemeyi unutma) ve girdi dizesini kopyalamalıdır. Yok edicin ters sırayla serbest bırakmalıdır: önce dahili text arabelleği, ardından yapının kendisi. Güvenlik için yok edicide bir NULL kontrolü ekle.
  • main.c: Modülünü bir dize nesnesi oluşturmak, içeriğini görüntülemek ve ardından düzgün bir şekilde temizlemek için kullan.

Bir girdi alacaksın: StringObject içinde depolanacak bir metin dizesi.

Ana dosyanda, sağlanan metinle bir StringObject oluştur, içeriğini yazdır, belleği serbest bırak ve ardından bir onay mesajı yazdır.

print_string işlevi şu biçimde çıktı vermelidir:

Text: {text}

Serbest bıraktıktan sonra şunu yazdır:

Freed

Örneğin, girdi Hello World olduğunda çıktı şöyle olur:

Text: Hello World
Freed

Kendin dene

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Varsa yeni satırı kaldır
    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: print_string kullanarak dizeyi yazdır
    
    // TODO: Free the StringObject using free_string
    
    // TODO: Temizlemeyi onaylamak için "Freed" yazdır
    
    return 0;
}

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C derleyicisi