[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Многобайтовые функции - Пример

Эта программа использует многобайтовые символы и работает следующим
образом:
7,10 Описывается массив символов для хранения многобайтовых символов.
Массив wides предназначен для хранения широких символов.
12   Описывается указатель на wchar_t и инициализируется адресом
строки широких символов.
13   Объявляется переменная типа wchar_t и инициализируется
константой.
17-18     Константа типа wchar_t преобразуется в многобайтовый символ
функцией wctomb(3C). Эта функция возвращает количество байт,
использованных для представления широкого символа. Затем многобайтовый
символ распечатывается.
20-21     Строка широких символов преобразуется в многобайтовые
символы функцией wcstombs(3C). Затем полученная строка многобайтовых
символов распечатывается.
25-26     Строка многобайтовых символов считывается из файла и
запоминается в массиве multi. Затем многобайтовые символы
преобразуются в широкие функцией mbstowcs(3C). Затем строка широких
символов может быть распечатана наоборот, от конца к началу.
29-32     Каждый широкий символ, начиная от конца строки,
преобразуется в многобайтовый функцией wctomb(3C) и распечатывается.
Этот цикл for предполагает, что fgets(3) считала строку, завершающуюся
переводом строки. Индекс i начинается с n-2, так что символ перевода
строки будет пропущен.
                    МНОГОБАЙТОВЫЕ ФУНКЦИИ - ПРИМЕР

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <locale.h>
 4
 5 main()
 6 {
 7     char multi[3*(BUFSIZ+1)];
 8     int n, i;
 9     FILE *fptr;
10     wchar_t wides[BUFSIZ+1];
11
12     wchar_t *ws = L"                 ";
13     wchar_t wc = L'  ';
14
15     setlocale(LC_CTYPE, "JAPANESE");
16
17     n = wctomb(multi, wc);
18     printf("%.*s\n", n, multi);
19
20     wcstombs(multi, ws, BUFSIZ);
21     printf("%s\n", multi);
22
23     /* open file */
24
25     fgets(multi, BUFSIZ*3, fptr);
26     n = mbstowcs(wides, multi, BUFSIZ+1);
27
28     /* print line reversed */
29     for (i=n-2; i >= 0; i--) {
30     n = wctomb(multi, wides[i]);
31     printf("%.*s", n, multi);
32     }
33     putchar('\n');
34 }