Null Sonlandırıcı
Coddy'nin C Journey'sinin Mantık & Akış 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ı, bir dizenin sonunu belirten, ASCII değeri sıfır olan bir karakterdir. Bu karakter olmadan printf gibi işlevler dizenizin nerede bittiğini bilemez ve rastgele bir sıfır baytına denk gelene kadar belleği okumaya devam eder; bu da çoğu zaman anlamsız bir çıktı üretir.
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ırmayla karakter karakter manuel başlatma kullanarak dizeler oluşturmayı ve dizelerle çalışmayı gösteren bir C programı yazın. Programınız şunları yapmalıdır:
- Tam olarak 5 öğeye sahip
nameadlı bir karakter dizisi bildirin - Uygun null sonlandırmayla
namedizisini karakter karakter manuel olarak başlatıp "John" yazmasını sağlayın:- Birinci öğe: 'J'
- İkinci öğe: 'o'
- Üçüncü öğe: 'h'
- Dördüncü öğe: 'n'
- Beşinci öğe:
'\0'(null sonlandırıcı)
- Tam olarak 7 öğeye sahip
cityadlı ikinci bir karakter dizisi bildirin - Uygun null sonlandırmayla
citydizisini karakter karakter manuel olarak başlatıp "Boston" yazmasını sağlayın:- 'B', 'o', 's', 't', 'o', 'n' ve
'\0'için ayrı karakter atamaları kullanın
- 'B', 'o', 's', 't', 'o', 'n' ve
- Her iki dizeyi de
printfbiçim belirleyicisiyle%skullanarak yazdırın - 4 öğeye sahip
testadlı üçüncü bir karakter dizisi oluşturarak null sonlandırma olmadan neler olduğunu gösterin testdizisini yalnızca '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 biçimde görüntülemelidir:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Bu görev, manuel dize oluşturma konusundaki anlayışınızı, C dizelerindeki null sonlandırıcının '\0' kritik önemini ve printf işlevinin %s ile dizenin nerede bittiğini belirlemek için null sonlandırıcıyı bulmaya nasıl dayandığını sınar.
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.
Mantık & Akış 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ıKendi başına pratik yap: Online C derleyicisi