"C'de string yok. String aslında karakter dizisi.
Dizinin adı zaten ilk elemanın adresidir."
// hap bilgi · şu ana kadar ne öğrendik
void ft_putchar(char c) { write(1, &c, 1); }
void → dönüş tipi (hiçbir şey döndürmez)ft_putchar → fonksiyon adı(char c) → parametre listesi{ ... } → fonksiyon gövdesi; → her ifadenin sonuna nokta gibiwrite(fd, buf, count)
1 = ekran'a'=97, '0'=48while ile döngüif/else ile kararc++ bir sonraki karakteren + '0''a' // tek karakter (1 byte) "a" // string ('a' + '\0' = 2 byte)
İkisi aynı şey değil. Karıştırma.
while (a <= '7') { b = a + 1; // b hep a'dan büyük while (b <= '8') { c = b + 1; // c hep b'den büyük ... } }
423 yazdırmak için: önce 42'yi yazdır (recursive çağrı), sonra son rakam (3).
if (nb >= 10) ft_putnbr(nb / 10); c = (nb % 10) + '0'; write(1, &c, 1);
Tuzak: -2147483648 negatife çevrilemez (overflow). Özel durum yaz.
int x = 42; int *p = &x;
┌─────────┐ ┌─────────┐
│ x │ │ p │
│ 0x1000 │ <───── │ 0x2000 │
│ [42] │ │ [0x1000]│
└─────────┘ └─────────┘
p, x'i "gösterir"
| Sembol | Anlamı | Örnek |
|---|---|---|
& | Adresi nerede? | &x = x'in adresi |
* | İçinde ne var? | *p = p'nin gösterdiği değer |
*&x = x · birbirinin tersi
int *p = &x; // TANIM: pointer tipi *p = 5; // KULLANIM: dereferans
Aynı sembol, farklı anlam. Bağlama bak.
// Değer geçince — DIŞARIYI ETKİLEMEZ void f(int n) { n = 42; } // Adres geçince — DIŞARIDAKİNİ DEĞİŞTİRİR void f(int *n) { *n = 42; }
Bir fonksiyon iki değer döndüremez ama pointer'la ikisini de değiştirebilir (ft_div_mod).
char *str = "hello"; str[0] == *str // 'h' str[i] == *(str + i) // aynı şey
Stringin sonu: '\0' (null terminator)
int *p = &x*p = 5int main(int argc, char **argv)
Tüm argümanlar string olarak gelir. "42" ≠ 42.
argv → char ** // string dizisi argv[i] → char * // i. string argv[i][j] → char // i.string j.harf
| Aile | Fonksiyonlar | İş |
|---|---|---|
| Kopya | strcpy, strncpy, strlcpy | src → dest |
| Kontrol | str_is_alpha/numeric/ lowercase/uppercase/printable | 0 / 1 döndürür |
| Dönüştür | strupcase, strlowcase, strcapitalize | str'yi değiştir |
i = 0; while (src[i] != '\0') { dest[i] = src[i]; i++; } dest[i] = '\0'; // elle ekle! return (dest);
while (str[i] != '\0') { if (!harf(str[i])) return (0); // erken çıkış i++; } return (1); // boş str → 1
| Kontrol | Aralık |
|---|---|
| Büyük harf | 'A' (65) — 'Z' (90) |
| Küçük harf | 'a' (97) — 'z' (122) |
| Rakam | '0' (48) — '9' (57) |
| Yazdırılabilir | 32 — 126 |
| Büyük↔küçük | fark = 32 |
char hex[] = "0123456789abcdef"; putchar(hex[c / 16]); // yüksek nibble putchar(hex[c % 16]); // düşük nibble
Cast: (unsigned char)c · işaret sorunu olmasın diye.
'\0' eklemeyi unutmaINT_MIN tuzağıstr NULL gelebilir, kontrol et (gerektiğinde)Sadece 6 egzersiz — C02'nin direkt devamı, kısa modül.