CodeBlanks Logo Icon CodeBlanks

Dinamik dize

  • C kursu
  • Orta seviye
  • Ders 18/116
  • 5 dk

malloc ile dinamik dize oluşturmayı öğrenirsin.

Dinamik dize

Bir dinamik dize, çalışma anında malloc ile ayrılan bir char dizisidir. Sabit boyutlu char dizilerinden farklı olarak, boyutu çalışma anında belirlenir.

Örnek: char *s = malloc(20);. Bu, 20 baytlık bir bellek ayırır ve başlangıç adresini s'ye atar. Dize içerik için strcpy(s, "Merhaba"); kullanılır. malloc için <stdlib.h>, strcpy için <string.h> başlık dosyası gerekir. İş bitince free(s); ile iade edilir; aksi halde sızıntı oluşur.

Dinamik dize kullanımı

Dinamik dize, ayrıldıktan sonra normal bir dize gibi kullanılır. strcpy ile doldurulur, printf ile yazdırılır. Önemli olan, ayrılan boyutu aşmamaktır.

Örnek: char *s = malloc(20); strcpy(s, "Merhaba"); printf("%s\n", s); free(s);. Burada 20 bayt ayrılır, 8 baytı kullanılır (Merhaba + null). Geri kalan 12 bayt boşta kalır. malloc belleği başlatmaz; bu yüzden strcpy ile güvenli şekilde doldurmak önemlidir. free çağrısı, sızıntıyı önler.

Uygulama Dinamik dize oluştur ve yazdır

char *s = malloc(20); ile yirmi baytlık dinamik dize ayır. strcpy(s, "Merhaba"); ile doldur. printf("%s\n", s); ile yazdır. Son olarak free(s); ile iade et. <stdlib.h> ve <string.h> başlık dosyalarını ekle.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// malloc ile 20 bayt ayir
// strcpy ile "Merhaba" kopyala
// printf ile yazdir, free ile iade et

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char *s = malloc(20);
    strcpy(s, "Merhaba");
    printf("%s\n", s);
    free(s);
    return 0;
}

Beklenen çıktı

Merhaba

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Dinamik bir dize için hangi fonksiyon kullanılır?

  • malloc Doğru cevap
  • printf
  • strcmp
  • strlen

Açıklama: malloc, yığın bellekte dinamik dize için yer ayırır.

2 Dinamik dize ayır

Soru
char *s = ____(20);
strcpy(s, "Merhaba");
Cevap
char *s = malloc(20);
strcpy(s, "Merhaba");

Açıklama: malloc(20) yirmi baytlık dinamik bellek ayırır.

3 Dinamik dize parçalarını eşle

Kavram Anlamı
malloc(20) Bellek ayırma
strcpy(s, ...) Dize doldurma
printf("%s", s) Yazdırma
free(s) İade

Orta seviye bölümündeki tüm dersler