Menu
Coddy logo textTech

Null Sonlandırıcı

Coddy'nin C Journey'sinin Logic & Flow bölümünün bir parçası — ders 13 / 63.

C'deki dizelerin karakter dizileri olduğunu öğrendiniz, ancak düzgün çalışmalarını sağlayan çok önemli bir ayrıntı vardır: her C dizesi, \0 olarak yazılan ve null sonlandırıcı adı verilen özel bir karakterle bitmelidir.

Null sonlandırıcı (null terminator), bir dizginin (string) sonunu belirten, ASCII değeri sıfır olan bir karakterdir. O olmadan, printf gibi fonksiyonlar dizginizin nerede bittiğini bilemez ve rastgele bir sıfır baytıyla karşılaşana kadar belleği okumaya devam eder; bu da genellikle anlamsız (garbage) çıktılar üretilmesine neden olur.

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0, C'ye şunu söyler: "Dize burada biter"

Bir string'i "Hello" gibi bir sabit (literal) ile başlattığınızda, C sizin için null sonlandırıcıyı otomatik olarak ekler. Ancak bir string'i karakter karakter manuel olarak oluşturduğunuzda, sonuna \0 eklemeyi unutmamalısınız.

Bu null sonlandırıcı, "Hello" gibi 5 karakterlik bir kelimenin neden 6 elemanlı bir karakter dizisine ihtiyaç duyduğunun sebebidir - \0 için fazladan bir alan. Bu kavramı anlamak önemlidir çünkü tüm C dizgi fonksiyonlarının dizgilerin nerede başlayıp nerede bittiğini nasıl belirlediğinin temelidir.

challenge icon

Görev

Kolay

Uygun null sonlandırma ile manuel karakter karakter başlatma kullanarak dizeler oluşturmayı ve bunlarla çalışmayı gösteren bir C programı yazın. Programınız şunları yapmalıdır:

  1. Tam olarak 5 elemanlı name adında bir karakter dizisi bildirin
  2. Uygun null sonlandırma ile "John" yazacak şekilde name dizisini karakter karakter manuel olarak başlatın:
    • Birinci eleman: 'J'
    • İkinci eleman: 'o'
    • Üçüncü eleman: 'h'
    • Dördüncü eleman: 'n'
    • Beşinci eleman: '\0' (null sonlandırıcı)
  3. Tam olarak 7 elemanlı city adında ikinci bir karakter dizisi bildirin
  4. Uygun null sonlandırma ile "Boston" yazacak şekilde city dizisini karakter karakter manuel olarak başlatın:
    • 'B', 'o', 's', 't', 'o', 'n' ve '\0' için ayrı karakter atamaları kullanın
  5. printf fonksiyonunu %s format belirleyicisi ile kullanarak her iki dizeyi de yazdırın
  6. 4 elemanlı test adında üçüncü bir karakter dizisi oluşturarak null sonlandırma olmadan ne olduğunu gösterin
  7. test dizisini sadece 'A', 'B', 'C', 'D' karakterleriyle başlatın (null sonlandırıcı olmadan)
  8. Öngörülemeyen çıktıyı göstermek için test dizisini %s kullanarak yazdırın

Çıktınız sonuçları aşağıdaki formatta görüntülemelidir:

Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]

Bu zorluk, manuel dize oluşturma anlayışınızı, C dizelerinde null sonlandırıcı '\0' karakterinin kritik önemini ve %s ile printf'in dizenin nerede bittiğini bilmek için null sonlandırıcıyı bulmaya nasıl güvendiğini test eder.

Kopya kağıdı

C karakter dizileri, dizginin sonunu işaretlemek için bir null sonlandırıcı \0 ile bitmesi gereken karakter dizileridir.

Null sonlandırıcının ASCII değeri sıfırdır ve printf gibi fonksiyonlara dizginin nerede bittiğini söyler:

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0 karakteri C'ye şunu söyler: "Dizgi burada biter"

"Hello" gibi dizgi sabitleri kullanıldığında, C otomatik olarak null sonlandırıcıyı ekler. Dizgileri karakter karakter oluştururken, \0 karakterini manuel olarak eklemelisiniz.

Bir dizgi, null sonlandırıcı için fazladan bir dizi elemanına ihtiyaç duyar - "Hello" (5 karakter) 6 elemanlı bir dizi gerektirir.

Kendin dene

#include <stdio.h>

int main() {
    // YAPILACAK: Kodunuzu buraya yazın
    // Karakter dizilerini belirtildiği gibi tanımlayın ve başlatın
    
    // Sonuçları yazdırın
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Logic & Flow bölümündeki tüm dersler