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
#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
#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
char *s = ____(20);
strcpy(s, "Merhaba");
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 |