wprintf, fwprintf, swprintf, wprintf_s, fwprintf_s, swprintf_s, snwprintf_s
| Definido en el encabezado <wchar.h>
|
||
int wprintf( const wchar_t* format, ... );
|
(1) | (desde C95) (hasta C99) |
int wprintf( const wchar_t* restrict format, ... );
|
(desde C99) | |
int fwprintf( FILE* stream, const wchar_t* format, ... );
|
(2) | (desde C95) (hasta C99) |
int fwprintf( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(desde C99) | |
int swprintf( wchar_t* buffer, size_t bufsz,
const wchar_t* format, ... );
|
(3) | (desde C95) (hasta C99) |
int swprintf( wchar_t* restrict buffer, size_t bufsz,
const wchar_t* restrict format, ... );
|
(desde C99) | |
int wprintf_s( const wchar_t* restrict format, ... );
|
(4) | (desde C11) |
int fwprintf_s( FILE* restrict stream,
const wchar_t* restrict format, ... );
|
(5) | (desde C11) |
int swprintf_s( wchar_t* restrict buffer, rsize_t bufsz,
const wchar_t* restrict format, ... );
|
(6) | (desde C11) |
int snwprintf_s( wchar_t* restrict s, rsize_t n,
const wchar_t* restrict format, ... );
|
(7) | (desde C11) |
Carga los datos de las ubicaciones dadas, los convierte a equivalentes de cadena ancha y escribe los resultados en varios destinos.
stream.bufsz es mayor que cero, escribe los resultados en una cadena ancha buffer. Se escriben como máximo bufsz - 1 caracteres anchos seguidos del carácter ancho nulo. Si bufsz es cero, no se escribe nada (y buffer puede ser un puntero nulo).- el especificador de conversión
%nestá presente enformat - cualquiera de los argumentos correspondientes a
%ses un puntero nulo formatobufferes un puntero nulobufszes cero o mayor queRSIZE_MAX / sizeof(wchar_t)- se producen errores de codificación en cualquier especificador de conversión de cadena y carácter
- (solo para
swprintf_s) el número de caracteres anchos a escribir, incluido el nulo, excederíabufsz.
s.wprintf_s, fwprintf_s, swprintf_s y snwprintf_s solo están garantizadas para estar disponibles si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <stdio.h>.Parámetros
| stream | - | flujo de archivo de salida para escribir |
| buffer | - | puntero a una cadena de caracteres anchos para escribir |
| bufsz | - | hasta bufsz - 1 caracteres anchos pueden ser escritos, más el terminador nulo
|
| format | - | puntero a una cadena ancha terminada en nulo que especifica cómo interpretar los datos |
| ... | - | argumentos que especifican datos para imprimir. Si algún argumento después de promociones de argumentos por defecto no es del tipo esperado por el especificador de conversión correspondiente, o si hay menos argumentos de los requeridos por format, el comportamiento no está definido. Si hay más argumentos de los requeridos por format, los argumentos adicionales son evaluados e ignorados.
|
La cadena format consiste en caracteres anchos ordinarios (excepto %), que se copian sin cambios al flujo de salida, y especificaciones de conversión. Cada especificación de conversión tiene el siguiente formato:
- carácter
%introductorio.
- carácter
- (opcional) una o más banderas que modifican el comportamiento de la conversión:
-: el resultado de la conversión está justificado a la izquierda dentro del campo (por defecto está justificado a la derecha).+: el signo de las conversiones con signo siempre se antepone al resultado de la conversión (por defecto el resultado solo lleva un signo menos cuando es negativo).- espacio: si el resultado de una conversión con signo no comienza con un carácter de signo, o está vacío, se antepone un espacio al resultado. Se ignora si la bandera
+está presente. #: se realiza la forma alternativa de la conversión. Véase la tabla a continuación para efectos exactos; de lo contrario, el comportamiento no está definido.0: para conversiones de números enteros y de punto flotante, se usan ceros a la izquierda para rellenar el campo en lugar de caracteres de espacio. Para números enteros se ignora si la precisión se especifica explícitamente. Para otras conversiones que usan esta bandera, el comportamiento no está definido. Se ignora si la bandera-está presente.
- (opcional) valor entero o
*que especifica el ancho mínimo del campo. El resultado se rellena con caracteres de espacio (por defecto), si es necesario, a la izquierda cuando está justificado a la derecha, o a la derecha si está justificado a la izquierda. En el caso de que se use*, el ancho se especifica mediante un argumento adicional de tipoint, que aparece antes del argumento a convertir y del argumento que suministra la precisión si se proporciona uno. Si el valor del argumento es negativo, resulta en la bandera-especificada y un ancho de campo positivo (Nota: Este es el ancho mínimo: el valor nunca se trunca).
- (opcional) valor entero o
- (opcional)
.seguido de un número entero o*, o ninguno, que especifica la precisión de la conversión. En el caso de que se use*, la precisión se especifica mediante un argumento adicional de tipoint, que aparece antes del argumento a convertir, pero después del argumento que suministra el ancho mínimo del campo si se proporciona uno. Si el valor de este argumento es negativo, se ignora. Si no se usa ni un número ni*, la precisión se toma como cero. Véase la tabla a continuación para efectos exactos de precisión.
- (opcional)
- (opcional) modificador de longitud que especifica el tamaño del argumento (en combinación con el especificador de formato de conversión, especifica el tipo del argumento correspondiente).
- especificador de formato de conversión.
Los siguientes especificadores de formato están disponibles:
| Conversión Especificador |
Explicación | Tipo de Argumento Esperado | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Modificador de Longitud→ | hh | h | ninguno | l | ll | j | z | t | L | |
| Solo disponible desde C99→ | Sí | Sí | Sí | Sí | Sí | |||||
%
|
Escribe literal %. La especificación de conversión completa debe ser %%.
|
N/D | N/D | N/D | N/D | N/D | N/D | N/D | N/D | N/D |
c
|
Escribe un solo carácter.
|
N/D | N/D | int |
wint_t |
N/D | N/D | N/D | N/D | N/D |
s
|
Escribe una cadena de caracteres.
|
N/D | N/D | char* |
wchar_t* |
N/D | N/D | N/D | N/D | N/D |
di
|
Convierte un entero con signo en representación decimal [-]dddd.
|
signed char |
short |
int |
long |
long long |
intmax_t |
※ |
ptrdiff_t |
N/D |
bB (opcional)
(C23) |
Convierte un entero sin signo en representación binaria bbbb.
|
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
versión sin signo de ptrdiff_t |
N/D |
o
|
Convierte un entero sin signo en representación octal oooo.
|
N/D | ||||||||
xX
|
Convierte un entero sin signo en representación hexadecimal hhhh.
|
N/D | ||||||||
u
|
Convierte un entero sin signo en representación decimal dddd.
|
N/D | ||||||||
fF (C99)
|
Convierte número de punto flotante a la notación decimal en el estilo [-]ddd.ddd.
|
N/D | N/D | double |
double (C99) |
N/D | N/D | N/D | N/D | long double |
eE
|
Convierte número de punto flotante a la notación exponencial decimal.
|
N/D | N/D | N/D | N/D | N/D | N/D | |||
aA
(C99) |
Convierte número de punto flotante a la notación exponencial hexadecimal.
|
N/D | N/D | N/D | N/D | N/D | N/D | |||
gG
|
Convierte número de punto flotante a notación decimal o exponencial decimal dependiendo del valor y la precisión.
|
N/D | N/D | N/D | N/D | N/D | N/D | |||
n
|
Devuelve el número de caracteres escritos hasta ahora por esta llamada a la función.
|
signed char* |
short* |
int* |
long* |
long long* |
intmax_t * |
※ |
ptrdiff_t * |
N/D |
p
|
Escribe una secuencia de caracteres definida por la implementación que define un puntero. |
N/D | N/D | void* |
N/D | N/D | N/D | N/D | N/D | N/D |
| Notas | ||||||||||
|
Las funciones de conversión de punto flotante convierten infinito a No es un número se convierte a Las conversiones El especificador de conversión usado para imprimir Las especificaciones de conversión correctas para los tipos de caracteres de ancho fijo (int8_t, etc.) están definidas en el encabezado <inttypes.h> (aunque PRIdMAX, PRIuMAX, etc. son sinónimos de El especificador de conversión de escritura en memoria Hay un punto de secuencia después de la acción de cada especificador de conversión; esto permite almacenar varios resultados Si una especificación de conversión no es válida, el comportamiento no está definido. | ||||||||||
Valor de retorno
bufsz (incluso cuando bufsz es cero).buffer. Devuelve un valor negativo en errores de codificación y en desbordamiento. Devuelve cero en todos los demás errores.buffer si bufsz hubiera sido suficientemente grande, o un valor negativo si ocurre un error. (es decir, la escritura fue exitosa y completa solo si el valor de retorno es no negativo y menor que bufsz)Notas
Mientras que las cadenas estrechas proporcionan snprintf, lo que hace posible determinar el tamaño de búfer de salida requerido, no hay un equivalente para cadenas anchas (hasta snwprintf_s)(desde C11), y para determinar el tamaño del búfer, el programa puede necesitar llamar a swprintf, verificar el valor de resultado y reasignar un búfer más grande, intentando de nuevo hasta tener éxito.
snwprintf_s, a diferencia de swprintf_s, truncará el resultado para que quepa dentro del arreglo apuntado por buffer, incluso si el truncamiento se trata como un error por la mayoría de las funciones con verificación de límites.
Ejemplo
#include <locale.h>
#include <wchar.h>
int main(void)
{
char narrow_str[] = "z\u00df\u6c34\U0001f34c";
// or "zß水🍌"
// or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
wchar_t warr[29]; // the expected string is 28 characters plus 1 null terminator
setlocale(LC_ALL, "en_US.utf8");
swprintf(warr, sizeof warr / sizeof* warr,
L"Converted from UTF-8: '%s'", narrow_str);
wprintf(L"%ls\n", warr);
}
Salida:
Converted from UTF-8: 'zß水🍌'
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.29.2.1 La función fwprintf (p: TBD)
- 7.29.2.3 La función swprintf (p: TBD)
- 7.29.2.11 La función wprintf (p: TBD)
- K.3.9.1.1 La función fwprintf_s (p: TBD)
- K.3.9.1.4 La función swprintf_s (p: TBD)
- K.3.9.1.13 La función wprintf_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.29.2.1 La función fwprintf (p: TBD)
- 7.29.2.3 La función swprintf (p: TBD)
- 7.29.2.11 La función wprintf (p: TBD)
- K.3.9.1.1 La función fwprintf_s (p: TBD)
- K.3.9.1.4 La función swprintf_s (p: TBD)
- K.3.9.1.13 La función wprintf_s (p: TBD)
- Estándar C11 (ISO/IEC 9899:2011):
- 7.29.2.1 La función fwprintf (p: 403-410)
- 7.29.2.3 La función swprintf (p: 416)
- 7.29.2.11 La función wprintf (p: 421)
- K.3.9.1.1 La función fwprintf_s (p: 628)
- K.3.9.1.4 La función swprintf_s (p: 630-631)
- K.3.9.1.13 La función wprintf_s (p: 637-638)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.24.2.1 La función fwprintf (p: 349-356)
- 7.24.2.3 La función swprintf (p: 362)
- 7.24.2.11 La función wprintf (p: 366)
Véase también
(C99)(C11)(C11)(C11)(C11) |
imprime salida con formato a stdout, un flujo de archivo o un búfer (función) |
(C95)(C95)(C95)(C11)(C11)(C11)(C11) |
imprime salida con formato de caracteres anchos a stdout, un flujo de archivo o un búfer usando una lista de argumentos variable (función) |
(C95) |
escribe una cadena ancha en un flujo de archivo (función) |
Documentación de C++ para wprintf, fwprintf, swprintf
| |