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 />

Yukarıdaki kodun çalıştırılması durumunda, ekrana "yanlış" ya da "doğru" yazdırılması<br />

güvence altında değildir. Eğer derleyici iki "Ankara" dizgesini bellekte ayrı ayrı yerlere<br />

yerleştirmiş ise, == karşılaştırma işleci 0 değeri üretir. Ancak bir derleyici, "Ankara"<br />

yazısını tek bir yere yerleştirip her iki dizgeyi aynı adres olarak da ele alabilir. Böyle bir<br />

durumda == karşılaştırma işleci 1 değeri üretir.<br />

Benzer bir yanlışlık aşağıdaki kod parçasında da yapılıyor:<br />

#include <br />

int main()<br />

{<br />

char *pstr = "Mavi ay";<br />

char s[20];<br />

printf("parolayı giriniz : ");<br />

gets(s);<br />

if (pstr == s)<br />

printf("dogru parola\n");<br />

else<br />

printf("yanlış parola\n");<br />

}<br />

return 0;<br />

Yukarıdaki programda s bir dizinin ismidir. s ismi işleme sokulduğunda derleyici<br />

tarafından otomatik olarak dizinin başlangıç adresine dönüştürülür. pstr ise char türden<br />

bir gösterici değişkendir. pstr göstericisine "Mavi ay" dizgesi atandığında, derleyici önce<br />

"Mavi ay" dizgesini bellekte güvenli bir yere yerleştirir. Daha sonra dizgenin yerleştirildiği<br />

yerin başlangıç adresini pstr göstericisine atar. Kullanıcının, parola olarak "Mavi ay" girişi<br />

yaptığını varsayın. Bu durumda if deyimi içinde yalnızca s adresiyle pstr göstericisinin<br />

değeri olan adresin eşit olup olmadığı sınanır. Bu adresler eşit olmadıkları için ekrana<br />

"yanlış parola" yazılır. İki yazının birbirine eşit olup olmadığı standart strcmp işlevi ile<br />

sınanmalıydı:<br />

#include <br />

#include <br />

int main()<br />

{<br />

char *pstr = "Mavi ay";<br />

char s[20];<br />

printf("parolayı giriniz : ");<br />

gets(s);<br />

if (!strcmp(pstr, s))<br />

printf("dogru parola\n");<br />

else<br />

printf("yanlış parola\n");<br />

}<br />

return 0;<br />

Tabi eşitlik ya da eşitsizlik karşılaştırması gibi, büyüklük küçüklük karşılaştırması da<br />

doğru değildir.<br />

if ("CAN" > "ATA")<br />

printf("doğru!\n");<br />

else<br />

printf("yanliş!\n");<br />

294

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

Saved successfully!

Ooh no, something went wrong!