CodeBlanks Logo Icon CodeBlanks

Çok baytlı dönüşüm

  • C kursu
  • İleri seviye
  • Ders 64/83
  • 5 dk

Çok baytlı ve geniş karakter dönüşümünü öğrenirsin.

mbstowcs ve wcstombs

mbstowcs çok baytlı bir dizeyi geniş karakter dizisine çevirir; wcstombs tersini yapar. İkisi de <stdlib.h> başlığındadır.

mbstowcs(NULL, s, 0) yalnızca sonuçtaki geniş karakter sayısını sayar; bellek ayırmaz. mbstowcs(wbuf, s, n) ise wbuf'a yazar. ASCII dize için bayt sayısı ve geniş karakter sayısı aynıdır: "Merhaba" için her ikisi 7. Dönüşümden önce setlocale(LC_ALL, "") veya "C" çağrılmalı; yoksa davranış tanımsızdır.

ASCII dönüşümü

ASCII dize "Merhaba" için strlen 7, mbstowcs(NULL, s, 0) de 7 döner. Karakter başına tek bayt tek geniş karakter eşler.

Eğer dize "çağ" olsaydı strlen 5 (iki harf ikişer bayt), mbstowcs 3 dönerdi. Bu derste ASCII üzerinden gidiyoruz; çıktı deterministik olsun diye setlocale(LC_ALL, "C") ile başlıyoruz. Dönüşüm sonrası wprintf yerine printf ile sayıları basıyoruz.

Uygulama Bayt ve geniş karakter sayısı

Önce setlocale(LC_ALL, "C"); çağır. const char *s = "Merhaba"; tanımla. size_t mb = strlen(s); ve size_t wcs = mbstowcs(NULL, s, 0); hesapla. printf("mb: %zu\n", mb); ve printf("wcs: %zu\n", wcs); yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

// Yereli 'C' olarak kur
// "Merhaba" için strlen ve mbstowcs sayılarını yazdır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

int main(void) {
    setlocale(LC_ALL, "C");
    const char *s = "Merhaba";
    size_t mb = strlen(s);
    size_t wcs = mbstowcs(NULL, s, 0);
    printf("mb: %zu\n", mb);
    printf("wcs: %zu\n", wcs);
    return 0;
}

Beklenen çıktı

mb: 7
wcs: 7

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 mbstowcs(NULL, s, 0) ne yapar?

  • Hata verir
  • Bellek ayırır
  • Dizeyi kopyalar
  • Geniş karakter sayar Doğru cevap

Açıklama: Üçüncü parametre 0 ise yalnızca sayar.

2 Dönüşüm işlevlerini eşle

Kavram Anlamı
mbstowcs Çok baytlı→geniş
wcstombs Geniş→çok baytlı
setlocale Yerel kurar
strlen Bayt sayar

3 mbstowcs çağrısı

Soru
size_t n = mbstowcs(NULL, s, ____);
Cevap
size_t n = mbstowcs(NULL, s, 0);

Açıklama: Üçüncü parametre 0 sayma kipidir.

İleri seviye bölümündeki tüm dersler