printf (Caracteres de campo de tipo)

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

En una especificación de formato, el carácter de type es un especificador de conversión que especifica si el argumento correspondiente debe interpretarse como un carácter, una cadena, un puntero, un entero o un número de punto flotante. El carácter de type es el único campo necesario en la especificación de formato y aparece después de los campos opcionales.

Los argumentos que siguen a la cadena de formato se interpretan según el carácter de type correspondiente y el prefijo opcional size. Las conversiones de tipos de caracteres char y wchar_t se especifican mediante c o C, y las cadenas de caracteres de byte único y multibyte o de carácter ancho se especifican mediante s o S, según la función de formato que se esté usando. Los argumentos de caracteres y cadenas que se especifican mediante el uso de c y s se interpretan como char y char* en la familia de funciones printf o como wchar_t y wchar_t* en la familia de funciones wprintf. Los argumentos de caracteres y cadenas que se especifican mediante el uso de C y S se interpretan como wchar_t y wchar_t* en la familia de funciones printf o como char y char* en la familia de funciones wprintf.

Los tipos de enteros como short, int, long, long long y sus variantes unsigned se especifican mediante d, i, o, u, x y X. Los tipos de punto flotante tipos como float, double y long double, se especifican mediante a, A, e, E, f, g y G. De forma predeterminada, y a menos que los modifique un prefijo de longitud de campo size, los argumentos de entero se convierten en el tipo int y los argumentos de punto flotante se convierten en double. En sistemas de 64 bits, un int es un valor de 32 bits; por consiguiente, los enteros de 64 bits se truncan cuando se les aplica formato para la salida, a menos que se use un prefijo size de ll o I64. Los tipos de puntero que se especifican mediante p usan la longitud predeterminada de la plataforma.

System_CAPS_ICON_note.jpg Nota

Los caracteres de tipo C, S y Z, así como el comportamiento de los caracteres de tipo c y s cuando se usan con las funciones printf y wprintf, son extensiones de Microsoft y no son compatibles con ANSI. Visual C++ no admite el carácter de tipo F.

printf (Caracteres de campo de tipo)

Carácter de tipoArgumentoFormato de salida
cCarácterCuando se usa con funciones printf, especifica un carácter de byte único; cuando se usa con funciones wprintf, especifica un carácter ancho.
CCarácterCuando se usa con funciones printf, especifica un carácter ancho; cuando se usa con funciones wprintf, especifica un carácter de byte único.
dEnteroEntero decimal con signo.
iEnteroEntero decimal con signo.
oEnteroEntero octal sin signo.
uEnteroEntero decimal sin signo.
xEnteroEntero hexadecimal sin signo; usa “abcdef”.
XEnteroEntero hexadecimal sin signo; usa “ABCDEF”.
ePunto flotanteValor con signo que tiene el formato [ – ]d.dddd e [signo]dd[d] donde d es un dígito decimal, dddd es uno o varios dígitos decimales, dd[d] es dos o tres dígitos decimales en función del formato de salida y el tamaño del exponente, y signo es + o –.
EPunto flotanteEs idéntico al formato de e salvo que el exponente se introduce mediante E en lugar de e.
fPunto flotanteValor con signo que tiene el formato [ – ]dddd.dddd, donde dddd es uno o varios dígitos decimales. El número de dígitos que hay delante del separador decimal depende de la magnitud del número y el número de dígitos que hay detrás del separador decimal depende de la precisión solicitada.
gPunto flotanteLos valores con signo se muestran en formato f o e, lo que sea más conciso para el valor y la precisión especificados. El formato e solo se usa cuando el exponente del valor es menor que –4 o mayor o igual que el argumento precision. Los ceros a la derecha se truncan y el separador decimal tan solo aparece si va seguido de uno o más dígitos.
GPunto flotanteEs idéntico al formato de g, salvo que el exponente se introduce mediante E en lugar de e (cuando corresponda).
aPunto flotanteValor con signo hexadecimal de punto flotante y precisión doble que tiene el formato [−]0xh.hhhh dd, donde h.hhhh son los dígitos hexadecimales (con letras minúsculas) de la mantisa y dd es uno o más dígitos del exponente. La precisión especifica el número de dígitos que se muestran después del punto.
APunto flotanteValor con signo hexadecimal de punto flotante y precisión doble que tiene el formato [−]0Xh.hhhh dd, donde h.hhhh son los dígitos hexadecimales (con letras mayúsculas) de la mantisa y dd es uno o más dígitos del exponente. La precisión especifica el número de dígitos que se muestran después del punto.
nPuntero para enteroNúmero de caracteres que se han escrito correctamente en el flujo o búfer. Este valor se almacena en el entero cuya dirección se indica como argumento. Vea la nota sobre seguridad más adelante en este artículo.
pTipo de punteroMuestra el argumento como una dirección de dígitos hexadecimales.
sCadenaCuando se usa con funciones printf, especifica una cadena de caracteres de byte único o multibyte; cuando se usa con funciones wprintf, especifica una cadena de carácter ancho. Los caracteres se muestran hasta el primer carácter nulo o hasta que se alcanza el valor de precision.
SCadenaCuando se usa con funciones printf, especifica una cadena de carácter ancho; cuando se usa con funciones wprintf, especifica una cadena de caracteres de byte único o multibyte. Los caracteres se muestran hasta el primer carácter nulo o hasta que se alcanza el valor de precision.
ZEstructura ANSI_STRING o UNICODE_STRINGCuando la dirección de una estructura ANSI_STRING o UNICODE_STRING se pasa como argumento, muestra la cadena incluida en el búfer al que apunta el campo Buffer de la estructura. Use un prefijo de modificador de longitud de w para especificar un argumento UNICODE_STRING, por ejemplo, %wZ. El campo Length de la estructura debe establecerse en la longitud de la cadena expresada en bytes. El campo MaximumLength de la estructura debe establecerse en la longitud del búfer expresada en bytes.

Normalmente, el carácter de tipo Z tan solo se usa en funciones de depuración de controladores que utilizan una especificación de formato, como dbgPrint y kdPrint.

Si el argumento correspondiente a un especificador de conversión de punto flotante es infinito, indefinido o NAN, en la tabla siguiente muestra la salida con formato.

ValorResultado
+ infinito1.#INF dígitos aleatorios
– infinito–1.#INF dígitos aleatorios
Indefinido (igual que un valor NaN simple)dígito .#IND dígitos aleatorios
NANdígito .#NAN dígitos aleatorios
System_CAPS_ICON_note.jpg Nota

Si el campo de Buffer del argumento correspondiente a %Z o del argumento correspondiente a %s o %S, es un puntero nulo, se mostrará "(null)".

System_CAPS_ICON_note.jpg Nota

En todos los formatos exponenciales, tres es el número predeterminado de dígitos del exponente que debe mostrarse. La función _set_output_format permite establecer en dos el número de dígitos que se muestran, pero este valor debe ampliarse a tres si así lo exige el tamaño del exponente.

System_CAPS_ICON_important.jpg Importante

Dado que el formato %n es intrínsecamente inseguro, se deshabilita de forma predeterminada. Si %n aparece en una cadena de formato, se invoca el controlador de parámetros no válidos, tal como se describe en Validación de parámetros. Para habilitar la compatibilidad con %n, vea _set_printf_count_output.

printf, _printf_l, wprintf, _wprintf_l
Sintaxis de especificación de formato: Funciones printf y wprintf
Directivas de marca
printf (Especificación de ancho)
Especificación de precisión
Especificación de tamaño
_set_output_format

Mostrar: