Created
October 13, 2011 11:44
-
-
Save roktas/1284037 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Dizgideki karakterler hakkında bilgi görüntüle. | |
* | |
* HATALI sürüm: geniş karakter desteği olmayan işlevlerle çalışılıyor. | |
*/ | |
#include <stdio.h> | |
#include <string.h> | |
int | |
main(int argc, char **argv) | |
{ | |
char *p; | |
int i; | |
if (argc < 2) { | |
printf("Kullanım: %s <dizgi>\n", argv[0]); | |
return 1; | |
} | |
printf("Dizgi: \"%s\".\n", argv[1]); | |
for (p = argv[1], i = 0; *p ; p++) | |
printf("#%d konumundaki karakter \"%c\"\n", ++i, *p); | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Dizgideki karakterler hakkında bilgi görüntüle. | |
*/ | |
#include <stdio.h> | |
#include <string.h> | |
#include <locale.h> | |
#include <stdlib.h> | |
int | |
main(int argc, char **argv) | |
{ | |
wchar_t *wp; | |
int i, n, len; | |
/* | |
* C90'da değişken uzunluklu diziler yasak, C99'da tamam. GCC ile | |
* derlerken uyarı almamak için -std=c99 anahtarını kullanın. | |
*/ | |
char p[MB_CUR_MAX+1]; | |
/* | |
* Yereli etkinleştirerek dar karakterlerin kodlama bilgisini al. Ancak | |
* bu sayede mbs* işlevleri doğru çalışır. Geniş karakterlerle | |
* çalışırken daima bu işlemle başlamalıyız. | |
*/ | |
setlocale(LC_ALL, ""); | |
if (argc < 2) { | |
printf("Kullanım: %s <dizgi>\n", argv[0]); | |
return 1; | |
} | |
printf("Dizgi: \"%s\".\n", argv[1]); | |
/* To obtain each character of the string, it is easy to convert */ | |
/* the string into wide string and re-convert each of the wide */ | |
/* string into multibyte characters. */ | |
/* | |
* mbstowcs tamponu için ayrılacak alanı hesaplamalıyız. Türkçe | |
* karakterler kullanılmışsa dizginin uzunluğu her halükarda geniş | |
* karakter sayısından büyük olacaktır. Bir miktar artık alan kullanmak | |
* pahasına strlen'in döndüğü bayt sayısını esas alıyoruz. Aksi halde | |
* önce dizgideki _gerçek_ karakter sayısını bulmamız gerekiyor ki bunun | |
* için de geniş karaktere dönüştürme yapmamız gerekir. | |
*/ | |
n = strlen(argv[1]) * sizeof(wchar_t); | |
/* | |
* Tamponu ayır | |
*/ | |
wp = (wchar_t *)malloc(n); | |
/* | |
* Geniş karaktere çevir, burada len karakter sayısını verir. | |
*/ | |
len = mbstowcs(wp, argv[1], n); | |
for (i = 0; i < len; i++) { | |
/* re-convert from wide character to multibyte character */ | |
int c; | |
/* | |
* Geniş karakteri tekrar dar karaktere çevir. Sonuç p | |
* dizgisinde (Türkçe karakterler için bu tek baytlık bir | |
* karakter olamaz artık değil mi?). | |
*/ | |
c = wctomb(p, wp[i]); | |
/* | |
* Çevirme başarılıysa dizgiyi sonlandır. | |
*/ | |
if (c > 0) p[c] = '\0'; | |
/* | |
* Sonucu raporla | |
*/ | |
printf("#%d konumundaki karakter \"%s\" (%d bayt) \n", i, p, c); } | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment