[<<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 }