Menu
Coddy logo textTech

Özet: String Wrapper

Coddy'nin C Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 16 / 61.

challenge icon

Görev

Kolay

Dinamik olarak ayrılmış bir karakter dizisini sarmalayan bir StringObject modülü oluşturalım. Bu tekrar görevi, bellek yönetimini güvenli bir şekilde gerçekleştirmek için nesne yaşam döngüsünün tamamını —yapıcı (constructor), salt okunur yöntem ve yıkıcı (destructor)— bir araya getiriyor.

Üç dosya oluşturacaksınız:

  • stringobj.h: Tek bir üyeye sahip bir StringObject yapısı (struct) bildirin: char *text (dinamik olarak ayrılmış bir dizgiye işaret eden bir pointer). Ayrıca üç fonksiyon bildirin:
    • create_string — bir const char * girdisi alır ve yeni ayrılmış bir StringObject'e bir pointer döndürür
    • print_string — bir const StringObject * alır ve saklanan metni görüntüler
    • free_string — bir StringObject * alır ve ayrılan tüm belleği serbest bırakır
    STRINGOBJ_H sembolü ile include guard kullanın.
  • stringobj.c: Her üç fonksiyonu da uygulayın. Yapıcınız (constructor) yapı için bellek ayırmalı, ardından metin için bellek ayırmalı (null sonlandırıcı için strlen artı bir eklemeyi unutmayın) ve girdi dizgisini kopyalamalıdır. Yıkıcınız (destructor) ters sırada serbest bırakmalıdır —önce dahili text tamponu, ardından yapının kendisi. Güvenlik için yıkıcınıza bir NULL kontrolü ekleyin.
  • main.c: Bir dize nesnesi oluşturmak, içeriğini görüntülemek ve ardından düzgün bir şekilde temizlemek için modülünüzü kullanın.

Bir girdi alacaksınız: StringObject'inizde saklanacak bir text string.

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

print_string fonksiyonu şu formatta çıktı vermelidir:

Text: {text}

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

Freed

Örneğin, Hello World girdisi ile çıktı şöyle olacaktır:

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: Giriş metni ile bir StringObject oluşturun
    
    // TODO: print_string kullanarak dizeyi yazdırın
    
    // TODO: free_string kullanarak StringObject nesnesini serbest bırakın
    
    // TODO: Temizlemeyi onaylamak için "Freed" yazdırın
    
    return 0;
}

Object Oriented Programming bölümündeki tüm dersler