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

Yazı Tutan char Türden Dizilerle Bir Dizgeyi Gösteren char Türden<br />

Göstericilerin Karşılaştırılması<br />

C dilinde bir yazı bilgisi en az iki ayrı biçimde saklanabilir:<br />

1. Bir yazı char türden bir dizi içinde saklanabilir:<br />

#include <br />

#include <br />

void foo()<br />

{<br />

char s1[100] = "Necati Ergin";<br />

char s2[100];<br />

char s3[100];<br />

}<br />

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

gets(s2);<br />

strcpy(s3, s2);<br />

/***/<br />

Yukarıdaki foo işlevinde s1 dizisine Necati Ergin yazısı ilkdeğer olarak yerleştiriliyor.<br />

s2 dizisine ise standart gets işlevi çağrısıyla klavyeden bir yazı alınıyor.<br />

s2 dizisindeki yazı, standart strcpy işlevine yapılan çağrı ile s3 dizisine kopyalanıyor.<br />

2. Yazı bir dizge olarak saklanarak char türden bir gösterici değişkenin bu dizgeyi<br />

göstermesi sağlanabilir:<br />

char *ptr = "Necati Ergin";<br />

İki yöntem, birbirinin tamamen eşdeğeri değildir. Aşağıdaki noktalara dikkat edilmesi<br />

gerekir:<br />

Dizgeler statik ömürlü varlıklar oldukları için programın sonlanmasına kadar bellekte yer<br />

kaplar. Bir gösterici değişkenin bir dizgeyi gösterirken, daha sonra başka bir dizgeyi<br />

gösterir duruma getirilmesi, daha önceki dizgenin bellekten boşaltılacağı anlamına<br />

gelmez:<br />

char *p = "Bu dizge programın sonuna kadar bellekte kalacak.";<br />

p = "artık yukarıdaki dizge ile bir bağlantı kalmayacak...";<br />

Yazının char türden bir dizi içinde tutulması durumunda bu yazıyı değiştirmek<br />

mümkündür. Dizi elemanlarına yeniden atamalar yapılarak yazı istenildiği gibi<br />

değiştirilebilir. Ama dizgelerin değiştirilmesi tanımlanmamış davranış özelliği gösterir,<br />

yanlıştır:<br />

#include <br />

#include <br />

void foo()<br />

{<br />

char *ps = "Metin";<br />

char *pstr = "Ankara";<br />

}<br />

ps[1] = 'Ç'; /* Yanlış! */<br />

strcpy(pstr, "Bolu"); /* Yanlış! */<br />

/***/<br />

299

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

Saved successfully!

Ooh no, something went wrong!