1. Home
  2. Docs
  3. C++
  4. Diziler
  5. Karekter Dizileri

Karekter Dizileri

Karekter dizileri, char tanımlı diziler ya da genel olarak C-tipi karekter dizileri olarak bilinen dizilerdir. İşaretçi temelli bir yapısı olduğu için işaretçiler hakkında bilgi sahibi olmakta fayda vardır. Bu bölümde bir karekter dizisi nasıl tanımlanır? Nasıl değer eklenir? ve Nasıl ekrana yazdırılır? gibi sorulara cevap arayacağız.

C-tipi karekter dizileri dediğimiz bu yapıların kullanımı beraberinde güvenlik problemleri ve hataları getirir. C++ için string yapılarını kullanmak bu problemler ve hatalardan kaçınmamıza yardımcı olur.

Peki bir karekter dizisi nasıl tanımlanır? Birkaç yöntemi bulunuyor. Bunlar;

char message[] = "Hello, world!";
char message2[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'};

const char * messagePtr = "Hello, world!";

Bu tanımların hepsi karekter dizisidir.

Her karekter dizisinin sonunda null ifadesi bulunmaktadır. Karekter dizisinin boyutunu belirtirken bu null ifadesini unutmak mantık hatasıyla karşılaşmaya sebep olur.

Tanımladığımız bu dizilerin karekterlerine nasıl erişebiliriz ve nasıl ekrana yazdırabiliriz?

size_t arraySize = sizeof(message) / sizeof(char);

std::cout << arraySize << "\n";

for (size_t i = 0; i < arraySize; ++i)
{
    std::cout << message[i];
    // std::cout << *(messagePtr+i);
}

Basit bir for döngüsü sayesinde ekrana yazdırabilir. Ayrıca cout ile daha da basit şekilde yazdırabiliriz.

std::cout << message << std::endl;

Bir karekter dizisini cout ile nasıl ekrana yazdırıyoruz diye düşünüyor olabilirsiniz. Bilmeniz gereken cout ve cin, sabit boyutlu karekter dizilerinin null karekterler tarafından sonlanan karekter dizinleri olarak işlenmesi gerektiğini varsayar. Dizinin ne kadar uzun olduğunun bir öenmi yoktur. Son karekter olan null karekterini görünceye kadar yazmaya ya da girdi almaya devam eder.

Bir karekter dizisi tanımladık, ekrana nasıl yazdırılır gördük peki bir karekter dizisine nasıl girdi alabiliriz?

std::cin >> inputName;                  //Boyutu aşarsa hata verir
std::cin >> std::setw(20) >> inputName; //Boyut kontrolü yapar
std::cin.getline(inputName, 20);        //Boyut kontrolü yapar

Bu 3 satır kodda birbirine benzer. Bazı farkları vardır ve ne amaçla kullanıldığı yanlarında yazmaktadır.

Karekter dizileriyle alakalı bahsedilebilecekler bu kadardır. Bilgi amaçlı paylaşılmıştır. C++ ile kod yazarken string kullanılması tavsiye edilir.

Tags , , , ,