Amiga Dünyası sayı 6, sayfa 39

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 39

"Amiga"

şeklinde bir string (Tk. karakter dizisi) görürse, otomatik olarak string'in elemanlarından oluşan bir karakter dizisi tanımlar ve sonuna \0 karakterini ekler. Yani compiler'ın bellekte oluşturduğu dizi aşağıdaki gibidir.

|A|m|i|g|a|\n|\D|

Compiler'ın böyle bir uygulama yapmasının nedeni; printf gibi fonksiyonların ekrana (genellikle ekrana, printer gibi diğer çevresel birimlere de olabilir) yazacakları string'lerin sonunu bulabilmesini sağlamaktır, printf tanımlamalarından biri olan %s, basacağı karakter dizisinin sonunda 0 karakterinin yani sıfır değerinin bulunmasını ister. Başka bir örnek olarak; eğer copy fonksiyonunu incelerseniz, s1 dizisine s2'den kopyalanan elemanın \0 yani null karakter olmasıyla fonksiyonun kopyalama işlemini durdurduğunu görürsünüz. Bütün bu işlemlerde string'lerin sonunda 0 karakteri bulunduğu ilkesinin kullanıldığı anlaşılabilir.

Bu ayki yazımı bitirmeden, bir kaç alıştırma için ikinci kutuya bir göz atmanızı öneriyorum.

Bir sonraki ay, dışsal (İng. external) değişkenleri inceleyerek yazı dizimizin ilk bölümü olan C diline giriş'i bitireceğimizi belirteyim. İyi çalışmalar.

KUTU 2

1> Girişindeki satırların 80 karakterden fazla olanlarını ekrana basan bir program yazın.

2> Kendisine verilen string'i ters çeviren ters(s) adlı bir fonksiyon yazın ve çalışırlığını kontrol için kısa bir programda fonksiyonu deneyin.

KUTU 1

1> Aşağıdaki programı yazıp Ram Disk'e kaydedin.

/* K&R'ın kitabından alınarak Amiga'ya uyarlanmıştır. */

#define EOF -1 #define MAXLINE 1000

main() {

int len; /*O anki satır uzunluğu*/ int max; /*O ana kadarki en büyük uzunluk*/ char line[MAXLINE]; /*O anki satır*/ char save[MAXLINE]; /*O ana kadar en uzun satır*/

max=(); while((Ien=getline(line,MAXLINE))>0) if (len>max) {

max=len; copy(line,save); } if(max>0) printf("%s",save); }

getline(s,lim) char s[]: int lim; {

int c; int i;

for(i=0;i<lim-1&&(c=getchar())!=EOF&&c!='\n';++i)

s[i]=c; if(c==") {

s[i]=c;

++i; } s[i]='\0'; return(i); }

copy(sl,s2) char s1[]; char s2[]; {

int i;

i=0; « while((s2[i]=sl[i])!=,\0')

++i; }

2> Şimdi programı "cc ram:program-ismi.c" ile compile edin. 3> Şimdi de "ln ram:program-ismi.o -lc" ile link edin. 4> Programı çalıştırmak için ram:program-ismi yazın. Bu durumda program sizin klavyeden girdiğiniz karakterler üzerinde işlem yapacaktır. Bu moddan çıkmak için Ctrl-\ (Control ve ters bölü tuşlarına birlikte) tuşlarına basmalısınız. Eğer programa bir text dosyasından redirection (Tk. yeniden yönlendirme) verirseniz program text dosyasının bitimiyle beraber size yaptığı işlemlerin sonuçlarını yazacaktır.

Klavyeyle gezinmek için ← ve → tuşları.