08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

#include <br />

#include <br />

#include <br />

char *getname()<br />

{<br />

char s[30];<br />

char *ptr;<br />

}<br />

printf("ismi giriniz : ");<br />

gets(s);<br />

ptr = (char *) malloc(strlen(s) + 1);<br />

if (ptr == NULL) {<br />

printf("cannot allocate memory!..\n");<br />

exit(EXIT_FAILURE);<br />

}<br />

return strcpy(ptr, s);<br />

getname işlevinde önce klavyeden bir isim yerel bir diziye alınıyor. Daha sonra strlen<br />

işlevi kullanılarak yerel diziye alınan ismin uzunluğu bulunuyor. malloc işlevi ile bu ismi ve<br />

sonuna gelecek sonlandırıcı karakteri içine alacak büyüklükte bir alan dinamik olarak elde<br />

ediliyor. Daha sonra da strcpy işlevi kullanılarak, isim dinamik olarak elde edilen alana<br />

kopyalanıyor ve bu bloğun başlangıç adresine geri dönülüyor.<br />

Dinamik bir yer ayırma işlemi yapan işlevin çağrılması sonucunda ayrılan bloğun geri<br />

verilmesi, işlevi çağıranın kodun sorumluluğunda olur:<br />

int main()<br />

{<br />

char *p = getname();<br />

/*****/<br />

free(p)<br />

/*****/<br />

return 0;<br />

}<br />

Bir işlev içinde dinamik olarak bir bellek bloğu ayırmak ve daha sonra bu bloğun<br />

başlangıç adresine geri dönmek C dilinde çok kullanılan bir tekniktir.<br />

Aşağıda kaynak kodu verilen strcon işlevi birinci parametresinde başlangıç adresi tutulan<br />

yazının sonuna ikinci parametresinde başlangıç adresi tutulan yazıyı kopyalıyor; fakat her<br />

iki adresteki yazıları da bozmadan, birleştirilmiş yazının başlangıç adresi olan bir adrese<br />

geri dönüyor:<br />

#include <br />

#include <br />

char *strcon(const char *s1, const char*s2)<br />

{<br />

char *ptr = malloc (strlen(s1) + strlen(s2) + 1);<br />

/* Basari sinamasi */<br />

strcpy(ptr, s1);<br />

strcat(ptr, s2);<br />

}<br />

return ptr;<br />

337

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!