NOMBRE¶
wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - conversión
con formato de la salida de caracteres anchos
SINOPSIS¶
#include <stdio.h>
#include <wchar.h>
int wprintf(const wchar_t *format, ...);
int fwprintf(FILE *stream, const wchar_t *format, ...);
int swprintf(wchar_t *wcs, size_t maxlen,
const wchar_t *format, ...);
#include <stdarg.h>
int vwprintf(const wchar_t *format, va_list args);
int vfwprintf(FILE *stream, const wchar_t *format, va_list args);
int vswprintf(wchar_t *wcs, size_t maxlen,
const wchar_t *format, va_list args);
DESCRIPCIÓN¶
La familia de funciones
wprintf es equivalente para caracteres anchos a
la familia de funciones
printf. Realizan la salida con formato de
caracteres anchos.
Las funciones
wprintf y
vwprintf realizan la salida de caracteres
anchos a
stdout.
stdout no debe estar orientada a bytes. Vea la
función
fwide para más información.
Las funciones
fwprintf y
vfwprintf realizan la salida de
caracteres anchos a
stream.
stream no debe estar orientado a
bytes. Vea la función
fwide para más información.
Las funciones
swprintf y
vswprintf realizan la salida de
caracteres anchos a un array de caracteres anchos. El programador debe
garantizar que hay espacio suficiente en
wcs para, al menos,
maxlen caracteres anchos.
Estas funciones son como las funciones
printf,
vprintf,
fprintf,
vfprintf,
sprintf y
vsprintf, salvo por
las siguientes diferencias:
- •
- La cadena format es una cadena de caracteres anchos.
- •
- La salida está formada por caracteres anchos, no por bytes.
- •
- swprintf y vswprintf toman un argumento maxlen,
sprintf y vsprintf no. (Las funciones snprintf y
vsnprintf toman un argumento maxlen, pero en Linux no
devuelven -1 ante un desbordamiento de buffer.)
El tratamiento de los caracteres de conversión
c y
s es
distinto:
- c
- Si no está presente un modificador l, el argumento
int se convierte a un carácter ancho, mediante una llamada a
la función btowc, y se escribe el carácter ancho
resultante. Si está presente un modificador l, se escribe el
argumento (carácter ancho) wint_t.
- s
- Si no está presente un modificador l: se espera que el
argumento ``const char *'' sea un puntero a un array de tipo
carácter (puntero a una cadena) que contenga una secuencia de
caracteres multibyte que comience en el estado inicial de cambios. Los
caracteres del array se convierten a caracteres anchos (cada uno mediante
una llama a la función mbrtowc con un estado de
conversión que comienza en el estado inicial antes del primer
byte). Se escriben todos los caracteres anchos resultantes hasta encontrar
(pero sin incluir) un carácter ancho terminador nulo. Si se
especifica una precisión, no se escriben más caracteres
anchos del número especificado. Dese cuenta que la precisión
determina el número de caracteres anchos escritos, no el
número de bytes o posiciones de pantalla. El array
debe contener un byte terminador nulo, a menos que se proporcione una
precisión y ésta sea tan pequeña que el número
de caracteres anchos obtenidos la iguale antes de que se llegue al final
del array. (Si está presente un modificador l: se espera que
el argumento ``const wchar_t *'' sea un puntero a un array
de caracteres anchos. Se escriben todos los caracteres anchos del array
hasta encontrar (pero sin incluir) un carácter ancho terminador
nulo. Si se especifica una presición, no se escriben más
caracteres del número especificado. El array debe contener un
carácter ancho terminador nulo, a menos que se de una
precisión y ésta sea más pequeña o igual que
el número de caracteres anchos en el array.
VALOR DEVUELTO¶
Las funciones devuelven el número de caracteres anchos escritos,
excluyendo el carácter ancho terminador nulo en el caso de las
funciones
swprintf y
vswprintf. Las funciones devuelven -1 en
caso de error.
ISO/ANSI C, UNIX98
VÉASE TAMBIÉN¶
printf(3),
fprintf(3),
snprintf(3),
fputwc(3),
fwide(3),
wscanf(3)
OBSERVACIONES¶
El comportamiento de
wprintf y compañía depende de la
categoría LC_CTYPE de la localización actual.
Si la cadena
format contiene caracteres anchos que no son ASCII, el
programa sólo funcionará correctamente si la categoría
LC_CTYPE de la localización actual en tiempo de ejecución es la
misma que la categoría LC_CTYPE de la localización actual en
tiempo de compilación. Esto es así porque la
representación
wchar_t es dependiente de la plataforma y de la
localización. (La libc de GNU representa los caracteres anchos usando
sus puntos de código Unicode (ISO-10646) pero otras plataformas no
hacen esto. Tampoco el uso de nombres universales de caractares, según
la norma ISO C99, de la forma \unnnn soluciona este problema.) Por tanto, en
programas internacionalizados, la cadena
format debería estar
formada sólo por caracteres anchos ASCII, o debería construirse
en tiempo de ejecución de una forma internacionalizada (por ejemplo,
usando
gettext o
iconv, seguida de
mbstowcs).