BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C standart kütüphanesi > <stdlib.h> > mbtowc

mbtowc() fonksiyonu

Bildirim

int mbtowc(wchar_t *dest, const char *src, size_t len);

Açıklama

İlk byte'ı src parametresi ile gösterilen çok byte'lı bir karakteri geniş bir karaktere çevirerek dest parametresi ile gösterilen adrese aktarır. Bu işlemin gerçekleşmesi için dest parametresinin NULL bir değer içermemesi gerekir.

Eğer src parametresi NULL bir işaretçi ise, global dönüşüm durumunu sıfırlar ve kaydırma dizilerinin kullanılıp kullanılmayacağını belirler.

Parametreler

dest: Geniş karaktere çevrilen karakterin aktarılacağı işaretçidir. NULL bir değer aldığında, fonksiyon çevrilen karakter değeri yerine çok byte'lı karakterin byte uzunluğunu geri döndürür.

src: Çevrilecek olan çoklu byte karakteri gösteren bir işaretçidir. NULL bir değer aldığında, fonksiyon dahili kaydırma durumunu başlangıç değerine sıfırlar ve çok byte'lık karakterlerin duruma bağlı bir kodlaması olup olmadığını döndürür.

len: Src parametresinde işlem yapılacak maksimum byte sayısıdır. MB_CUR_MAX değerinden daha fazla karakter dikkate alınmaz.

Dönüş değeri

Src parametre değeri;

  • NULL bir işaretçi değil ise, çoklu byte karakteri içindeki byte sayısını,
  • İlk byte geçerli bir çoklu byte karakteri değilse -1 değerini,
  • Boş bir karakter ('\0') ise 0 değerini geri döndürür.

Eğer src parametre değeri NULL bir işaretçi ise, başlangıç kaydırma durumunu temsil etmek için iç dönüşüm durumunu sıfırlar ve geçerli çok byte'lı kodlama duruma bağlı değilse (kaydırma dizileri kullanmazsa) 0 değerini veya duruma bağlı ise (kaydırma dizileri kullanırsa) sıfır olmayan bir değer geri döndürür.

Örnek


#include <stdio.h>
#include <stdlib.h>

int main(void) {
	const char *cp = "Bilgisayar";
	wchar_t dest;
	int ret;
	size_t len;

	len = strlen(cp);

	/* Dahili çevirme durumunu sıfırlama */
	mbtowc (NULL, NULL, 0);

	while (len>0) {
	   printf("Adres: %p Karakter: %c ", cp, *cp);
	   ret = mbtowc(&dest, cp, len);
	   if (ret<1) break;
	   printf ("Geniş karakter: %lc\n", dest);

       cp += ret;
       len -= ret;
	}

    return 0;
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

Adres: 00403024 Karakter: B Geniş karakter: B
Adres: 00403025 Karakter: i Geniş karakter: i
Adres: 00403026 Karakter: l Geniş karakter: l
Adres: 00403027 Karakter: g Geniş karakter: g
Adres: 00403028 Karakter: i Geniş karakter: i
Adres: 00403029 Karakter: s Geniş karakter: s
Adres: 0040302A Karakter: a Geniş karakter: a
Adres: 0040302B Karakter: y Geniş karakter: y
Adres: 0040302C Karakter: a Geniş karakter: a
Adres: 0040302D Karakter: r Geniş karakter: r

Yukarıdaki program, mbtowc() fonksiyonu ile bir karakter dizisini çoklu byte dizisine çevirir. Çevrilen diziyi karakter karakter bellek adresleri ile birlikte ekrana yazar.