Download 400 Bad request PDF

Title400 Bad request
File Size3.2 MB
Total Pages529
Document Text Contents
Page 1

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin

1/529

İÇİNDEKİLER

Programlama ve C 3
Sayı Sistemleri 15
Genel Kavramler ve Terimler 25
Bir C Programı Oluşturmak 31
Veri Türleri 33
Bildirim ve Tanımlama 39
Değişmezler 45
İşlevler 53
İşleçler 73
Bilinirlik Alanı ve Ömür 93
Kontrol Deyimleri 101
if Deyimi 102
İşlev Bildirimleri 119
Tür Dönüşümleri 127
Döngü Deyimleri 137
Koşul İşleci 159
Önişlemci Komutları - 1 165
Switch Deyimi 175
goto Deyimi 185
Rastgele Sayı Üretimi ve Kontrol Deyimlerine İlişkin Genel Uygulamalar 189
Diziler 199
char Türden Diziler ve Yazılar 215
sizeof İşleci 226
Göstericiler 229
Gösterici İşleçleri 235
Yazılarla İlgili İşlem Yapan Standart İşlevler 265
Gösterici Hataları 280
void Türden Göstericiler 283
Dizgeler 291
Gösterici Dizileri 301
Göstericiyi Gösteren Gösterici 307
Çok Boyutlu Diziler 311
exit, abort atexit İşlevleri 321
Dinamik Bellek Yönetimi 323
Belirleyiciler ve Niteleyiciler 341
Yapılar 359
Tür İsimleri Bildirimleri ve typedef Belirleyicisi 387
Tarih ve Zaman ile İlgili İşlem Yapan Standart İşlevler 397
Birlikler 411
Numaralandırmalar 421
Bitsel İşleçler 427
Bit Alanları 441
Komut Satırı Argümanları 445
Dosyalar 451
Makrolar 485
Önişlemci Komutları - 2 495
İşlev Göstericileri 505
Özyinelemeli İşlevler 519
Değişken Sayıda Arguman Alan İşlevler 525
Kaynaklar 529

Page 264

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin

264

int puts(const char *str);

İşlev, str adresindeki yazıyı standart çıkış birimine yazar. İşlev yazma işlemini
tamamladıktan sonra ekrana bir de '\n' karakteri yazar. Eğer yazma işlevi başarılı olursa
işlevin geri dönüş değeri negatif olmayan bir değerdir. Başarısızlık durumunda işlev,
negatif bir değere geri döner. Aşağıda benzer işi gören myputs isimli bir işlev
tanımlanıyor:

#include <stdio.h>

void myputs(const char *str)
{
while (*str != '\0')
putchar(*str++);
putchar('\n');
}

int main()
{
char s[] = "NecatiErgin";
int k;

for (k = 0; k < 11; ++k)
myputs(s + k);

return 0;
}

stdio.h içinde bildirilen standart gets işlevi de aslında gösterici parametreli bir işlevdir:

char *gets(char *ptr);

İşlev standart giriş biriminden aldığı yazıyı parametresine aktarılan adrese yerleştirir.
Eğer giriş işlemi başarılı olursa işlev ptr adresine geri döner. Başarısızlık durumunda
işlevin geri dönüş değeri NULL adresidir. Aşağıda benzer işi gören mygets isimli bir işlev
tanımlanıyor:

#include <stdio.h>

char *mygets(char *ptr)
{
int ch;
int index = 0;

while ((ch = getchar()) != '\n')
ptr[index++] = ch;

ptr[index] = '\0';

return ptr;
}

Page 265

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin

265

Yazılarla İlgili İşlem Yapan Standart İşlevler

C'nin standart bazı işlevleri bir yazının başlangıç adresini parametre olarak alarak yazı ile
ilgili birtakım faydalı işlemler yapar. Bu işlevlere dizge işlevleri denir. Dizge işlevlerinin
bildirimleri string.h dosyası içindedir.

strlen İşlevi
En sık çağrılan standart C işlevlerinden biridir. İşlevin ismi olan strlen, "string length"
sözcüklerinden gelir. Bu işlev bir yazının karakter uzunluğunu yani yazının kaç
karakterden oluştuğu bilgisini elde etmek için kullanılır.
İşlevin bildirimi:

size_t strlen(const char *str);

biçimindedir. İşlevin parametre değişkeni, uzunluğu hesaplanacak yazının başlangıç
adresidir. İşlev sonlandırıcı karakter görene kadar karakterlerin sayısını hesaplar. Geri
dönüş değeri türü yerine yazılan size_t nin şimdilik unsigned int türünün bir başka ismi
olduğunu düşünebilirsiniz.

#include <stdio.h>
#include <string.h>

int main()
{
char s[100];

printf("bir yazı giriniz : ");
gets(s);
printf("(%s) yazısının uzunluğu = %u\n", s, strlen(s));

return 0;
}

Standart C işlevi olan strlen aşağıdaki biçimlerde tanımlanabilir:

unsigned int mystrlen1(const char *str)
{
unsigned int length = 0;

while (*str != '\0') {
++length;
++str;
}
return length;
}

unsigned int mystrlen2(const char *str)
{
unsigned int len;

for (len = 0; str[len] != '\0'; ++len)
;
return len;
}

Page 528

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin

528

char *pd;
int k;
char buffer[BUFFER_SIZE] = {'\0'};
va_start (ap, ptr);

while (ptr){

strcat(buffer, ptr);
ptr = va_arg(ap, const char *);
}

pd = (char *)malloc(strlen(buffer) + 1);
if (pd == NULL) {

printf("bellek yetersiz!\n");
exit(EXIT_FAILURE);

}
va_end(ap);

return strcpy(pd, buffer);
}

int main ()
{
char *pstr = con_strings("C ", "ve ", "Sistem ", "Programcilari ",
"Dernegi", NULL);
puts(pstr);
free(pstr);

return 0;
}

con_strings işlevinin tanımını inceleyin:
va_list türünden ap değişkeni va_start makrosuyla ilkdeğerini alıyor.

va_start (ap, ptr);

Parametre değişkeni olan ptr nin değeri NULL adresi olmadığı sürece dönen bir while
döngüsü oluşturulduğunu görüyorsunuz. Döngünün her turunda işleve gönderilen
argümanlardan her birinin değeri va_arg makrosuyla elde ediliyor ve bu değer ptr
göstericisine atanıyor. ptr göstericisinin gösterdiği yazı önce yerel buffer isimli dizideki
yazının sonuna standart strcat işleviyle ekleniyor. İşleve çağrı ile gönderilen son
argümanın NULL adresi olması gerekiyor. ptr göstericisinin değeri NULL adresi olduğunda
buffer dizisindeki yazı dinamik bir bellek bloğuna kopyalanıyor. İşlev içinde va_end
makrosu çağırıldıktan sonra işlev dinamik bloğun adresiyle geri dönüyor.

Page 529

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin

529

Kaynaklar

1.American National Standard for Programming Languages - C
ANSI/ISO 9989-1990

2. C - A Reference Manual.
Samuel P. Harbison III - Guy L. Steele Jr.
Prentice-Hall, Inc 2002
ISBN 0-13-089592x

3. The Standard C Library
P. J. Plaguer
Prentice Hall P T R
ISBN 0-13-131509-9

4. C Programming FAQ's
Steve Summit
Addison Wesley

Similer Documents