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.
Görev
KolayUygun 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:
- Tam olarak 5 elemanlı
nameadında bir karakter dizisi bildirin - Uygun null sonlandırma ile "John" yazacak şekilde
namedizisini 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ı)
- Tam olarak 7 elemanlı
cityadında ikinci bir karakter dizisi bildirin - Uygun null sonlandırma ile "Boston" yazacak şekilde
citydizisini karakter karakter manuel olarak başlatın:- 'B', 'o', 's', 't', 'o', 'n' ve
'\0'için ayrı karakter atamaları kullanın
- 'B', 'o', 's', 't', 'o', 'n' ve
printffonksiyonunu%sformat belirleyicisi ile kullanarak her iki dizeyi de yazdırın- 4 elemanlı
testadında üçüncü bir karakter dizisi oluşturarak null sonlandırma olmadan ne olduğunu gösterin testdizisini sadece 'A', 'B', 'C', 'D' karakterleriyle başlatın (null sonlandırıcı olmadan)- Öngörülemeyen çıktıyı göstermek için
testdizisini%skullanarak 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;
}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
1Pointer Temelleri
Pointer Nedir?Pointer TanımlamaAdres Operatörü (&)Dereference Operatörü (*)NULL Pointer'larÖzet: Pointer Temelleri4Proje: Basit Metin Aracı
Projeye Genel BakışKarakter Sayma2İşaretçiler ve Diziler
İşaretçi Olarak Dizi İsimleriDizi Elemanları - İşaretçilerİşaretçi Aritmetiğiİşaretçilerin KarşılaştırılmasıÖzet: İşaretçi ile Dizi Gezinme5İşaretçiler ve Fonksiyonlar
Değer ile GeçmeFonksiyonlara İşaretçi Göndermeİşaretçiler ile Değişkenleri DeğiştirmeKlasik Bir Örnek: SwapFonksiyonlara Dizi GöndermeÖzet: Fonksiyon İşaretçi Argümanları8Yapılar ve İşaretçiler
Yapılara İşaretçilerOk Operatörü (->)Yapıları Değer ile AktarmaYapı İşaretçilerini AktarmaYapıların Dinamik TahsisiÖzet: Yapıyı Değiştirme - Ptr11Son Tekrar Görevleri
Tekrar: Dinamik String BirleştirmeTekrar: Struct DizisiTekrar: Kelime Frekans Sayacı3Karakter Dizileri ve Stringler
char Dizisi Olarak StringlerNull Sonlandırıcıscanf ile String Girişistrlen() Kullanımıstrcpy() Kullanımıstrcat() Kullanımıstrcmp() KullanımıÖzet: Temel String Fonksiyonları