Функции ввода-вывода двухбайтовых символов

Содержание

Некоторые функции ввода-вывода, описанные в главе 13, имеют реализации, ориентированные на работу с двухбайтовыми символами. Эти функции (они перечислены в табл. 19.2) используют заголовок <wchar.h>. Обратите внимание на то, что функции swprintf() и vswprintf() требуют передачи дополнительного параметра, в котором не нуждаются соответствующие им функции для типа char.




Таблица 19.2. Функции ввода/вывода для двухбайтовых символов и соответствующие им функции для типа char
ФункцияСоотвествующая функция для типа char
wint_t fgetwc(FILE *stream)

fgetc()
wchar_t *fgetws(
  wchar_t *str,
  int num,
  FILE *stream)

fgets()
В версии С99 к параметрам str и stream применен квалификатор restrict
wint_t fputwc(
  wchar_t ch,
  FILE *stream)

fputc()
int fputws(
  const wchar_t *str,
  FILE *stream)

fputs()
В версии С99 к параметрам str и stream примененквалификатор restrict
int fwprintf(
  FILE *stream,
  const wchar_t *fmt,
  ...)

fprintf()
В версии С99 к параметрам stream и fmt применен квалификатор restrict
int fwscanf(
  FILE *stream,
  const wchar_t *fmt,
  ...)

fscanf()
В версии С99 к параметрам stream и fmt применен квалификатор restrict
wint_t getwc(FILE *stream)

getc()
wint_t getwchar(void)

getchar()
wint_t putwc(
  wchar_t ch,
  FILE	*stream)

putc()
wint_t putwchar(wchar_t ch)

putchar()
int swprintf(
  wchar_t *str,
  size_t num,
  const wchar_t *fmt,
  ...)

sprintf()
Обратите внимание на то, что добавлен параметр num который ограничивает количество символов, записываемых в массив str. В версии С99 к параметрам str и fmt применен квалификатор restrict
int swscanf(
  const wchar_t *str,
  const wchar t *fmt,
  ...)

sscanf()
В версии С99 к параметрам str и fmt применен квалификатор restrict
wint_t ungetwc(
  wint_t ch,
  FILE *stream)

ungetc()
int vfwprintf(
  FILE *stream,
  const wchar_t *fmt,
  va_list arg)

vfprintf()
В версии С99 к параметру fmt применен квалификатор restrict
int vfwscanf(
  FILE * restrict stream,
  const wchar_t * restrict fmt,
  va_list arg)

vfscanf()
(Добавлена в версии С99)
int vswprintf(
  wchar_t *str,
  size_t num,
  const wchar_t *fmt,
  va_list arg)

vsprintf()
Обратите внимание на то, что добавлен параметр num, который ограничивает количество символов, записываемых в массив str. В версии С99 к параметрам str и fmt применен квалификатор restrict
int vswscanf(
  const wchar_t * restrict str,
  const wchar_t * restrict fmt,
  va_list arg)

vsscanf()
(Добавлена в версии С99)
int vwprintf(
  const wchar_t *fmt,
  va_list arg)

vprintf()
В версии С99 к параметру fmt применен квалификатор restrict
int vwscanf(
  const wchar_t * restrict fmt,
  va_list arg)

vscanf()
(Добавлена в версии С99)
int wprintf(
  const wchar_t *fmt,
  ...)

printf()
В версии С99 к параметру fmt применен квалификатор restrict
int wscanf(
  const wchar_t *fmt,
  ...)

scanf()
В версии С99 к параметру fmt применен квалификатор restrict

Дополнительно к функциям, показанным в таблице, добавлена следующая функция, ориентированная на работу с двухбайтовыми символами:

int fwide(FILE *stream, int how);

Если значение параметра how положительно, функция fwide() делает поток stream потоком двухбайтовых символов. Если же значение параметра how отрицательно, то функция fwide() превращает поток stream в поток объектов типа char. А если значение how равно нулю, на поток stream никакого воздействия не оказывается. Если этот поток уже был ориентирован либо на двухбайтовые, либо на обычные символы, он изменяться не будет. Функция возвращает положительное значение, если поток рассматривается как содержащий двухбайтовые символы. Отрицательное значение возвращается, если он рассматривается как содержащий символы типа char. В случае, когда поток еще не ориентирован, функция возвращает нуль. Ориентация потока также определяется его первым использованием.