08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

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

Bir Yazının Başlangıç Adresini Tutan Göstericiyi Yazının Sonuna<br />

Öteleme<br />

Birçok programda başlangıç adresi tutulan bir yazının sonunu bulmak gerekir.<br />

Bir yazının başlangıç adresini tutan bir gösteri değişkeni, yazının sonundaki sonlandırıcı<br />

karakteri gösterir hale getirmek için, üç ayrı kalıp kullanılabilir:<br />

p bir yazının başlangıç adresini tutan gösterici olsun. Aşağıdaki deyimlerin hepsi p<br />

gösterici değişkeni yazının sonundaki, sonlandırıcı karakterin bulunduğu yere öteler.<br />

p += strlen(p);<br />

p = strchr(p, '\0');<br />

while (*p != '\0')<br />

++ptr;<br />

Aşağıdaki döngüden çıktıktan sonra p göstericisi sonlandırıcı karakterden bir sonraki<br />

adresi gösterir. Neden?<br />

while (*p++ != '\0')<br />

;<br />

Boş Yazı<br />

Boş yazı (null string) uzunluğu 0 olan yazıdır. str, char türden bir dizi olmak üzere, eğer<br />

str[0] sonlandırıcı karakter ise, str dizisinde boş yazı tutulmaktadır. Boş yazı geçerli bir<br />

yazıdır.<br />

Yazılarla ilgili işlem yapan işlevler, adresini aldığı yazıların boş yazı (null string) olması<br />

durumunda da doğru çalışmalıdır. Aşağıdaki döngüyü inceleyin:<br />

while (*++p != '\0')<br />

;<br />

p bir yazının başlangıç adresini tutan gösterici değişken olmak üzere, yukarıdaki<br />

döngüden çıkıldığında p, yazının sonundaki sonlandırıcı karakteri gösterir. Ancak p'nin<br />

gösterdiği yazı eğer boş ise, yukarıdaki döngü, yazıya ait olmayan bellek alanı üzerinde<br />

işlem yapmaya başlar. Bu da şüphesiz bir programlama hatasıdır.<br />

Şimdi de aşağıdaki if deyimini inceleyin:<br />

int strfunc(const char *ptr)<br />

{<br />

if (!ptr || !*ptr)<br />

return 0;<br />

/***/<br />

}<br />

strfunc işlevi içinde yer alan if deyiminde yer alan<br />

!ptr || !*ptr<br />

ifadesi, ptr gösterici değişkeninin değerinin NULL adresi olması durumunda ya da ptr'nin<br />

gösterdiği yazının boş olması durumunda doğrudur. Bu ifade, " ptr bir yazıyı<br />

göstermiyorsa ya da ptr'nin gösterdiği yazı boşsa" anlamına gelir. Bu ifadenin mantıksal<br />

tersi olan<br />

ptr && *ptr<br />

278

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

Saved successfully!

Ooh no, something went wrong!