C

Türkçe karakter kullanımı

C dilinde bir string oluşturmak istediğimizde char veri tipinde bir dizi tanımlar veya pointer kullanırız. Ascii karakterlerini kullandığımızda string.h kütüphanesinin sağladığı tüm fonksiyonları kullanabilir, stringteki istediğimiz bir karakteri indis yardımıyla döndürebiliriz. Ama türkçe karakter kullandığınızda beklenmedik sonuçlarla karşılaşabilirsiniz. Aşağıdaki kodu inceleyelim.

char str[] = "Şemşiye";
printf("%c\n",str[0]);
printf("%d",strlen(str));

İlk printf fonksiyonu ekrana anlamsız bir karakter, ikinci printf fonksiyonu ise 9 değerini basar. Bunun sebebi ascii karakterleri için hafızada char tipinden 1 birimlik yer ayrılırken, türkçe karakterler için char tipinden 2 birimlik yer ayrılmasıdır. Bu sorunu çözmek için “wide char” veri tipini kullanacağız. Bu tip, adından da anlaşılacağı gibi hafızada 1 değil 2 byte’lık yer tutar. string.h kütüphanesindeki fonksiyonlar gibi wide char veri tipininde kendi özel fonksiyonları vardır. Bu veri tipini kullanmak için programa wchar.h headerini dahil edeceğiz.

#include <wchar.h>
#include <locale.h>
int main(){
 setlocale(LC_ALL,"");
 wchar_t str[] = L"Şemsiye";
 wprintf(L"%lc",str[0]);
 wprintf(L"%d",wcslen(str));
}

Programı tekrar derleyip çalıştırdığımızda ilk wprintf fonksiyonunun ekrana ‘Ş’ harfini, ikinci wprintf fonksiyonunun ise 7 değerini bastığını göreceğiz, wchar.h headeri wprintf, wscanf, wcslen gibi birçok fonksiyon barındırır.

Wchar hakkında daha fazla bilgi edinmek isterseniz, şu sayfayı ziyaret edebilirsiniz: https://www.gnu.org/software/libc/manual/html_node/Extended-Char-Intro.html

Setlocale fonksiyonu hakkında bilgi edinmek isterseniz, şu sayfayı ziyaret edebilirsiniz: https://www.gnu.org/software/libc/manual/html_node/Setting-the-Locale.html

Leave a Reply

Your email address will not be published. Required fields are marked *