printf_p (Parámetros de posición)
Los parámetros posicionales proporcionan la capacidad de especificar por el número que de los argumentos debe ser sustituido en un campo en una cadena de formato. Las siguientes funciones de printf de parámetro posicional disponibles:
printf, _printf_l, wprintf, _wprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_lvprintf, _vprintf_l, vwprintf, _vwprintf_l
_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_lvfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l
_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l
Especificar parámetros posicionales
Indización de parámetro
De forma predeterminada las funciones posicionales se comportan exactamente igual no a la posición unos, si no hay ningún formato posicional presente. Los parámetros posicionales se especifican con el formato “%m$x”, donde m indica un número ordinal numérico que indica la posición del parámetro en la lista de parámetros, antes de la cadena de formato y x indica el tipo de carácter de campo del tipo especificado en la función de printf . Los parámetros de la lista son el inicio indizado en el valor 1 para el primer elemento de la lista y así sucesivamente. Para obtener información adicional sobre los caracteres de campo tipo, vea printf (Caracteres de campo de tipo).
Para obtener un ejemplo de este comportamiento:
_printf_p("%1$s %2$s", "November", "10");
imprimir
November 10
El orden de los números utilizados no tiene que coincidir con el orden de los argumentos especificados. Así lo siguiente es válido:
_printf_p("%2$s %1$s", "November", "10");
imprimir
10 November
Puede utilizar el parámetro más de una vez al formatear, a diferencia de cadenas de formato tradicionales, para
_printf_p("%{1$d times %1$d is %2$d", 10, 100);
imprimir
10 times 10 is 100
Sin embargo, todos los argumentos se deben utilizar al menos una vez en alguna parte de la cadena de formato.
El número máximo de parámetros posicionales permitidos en una cadena de formato se da por _ARGMAX.
Ancho y Prevision
Cuando el símbolo * se utiliza para especificar que el ancho o la precisión debe ser determinado de un argumento, la posición del ancho o el valor de la previsión debe aparecer inmediatamente después del símbolo *. Por ejemplo,
_printf_p("%1$*2$s","Hello", 10);
-O bien-
_printf_p("%2$*1$s",10, "Hello");
Argumentos posicionales y no tabulares el mezclar
Los parámetros posicionales no se pueden combinar con parámetros no posicionales en la misma cadena de formato. Sin embargo, printf_s y funciones relacionadas todavía admiten parámetros no posicionales en las cadenas de formato que no contienen ningún parámetro de posición.
Ejemplo
// positional_args.c
// Positional arguments allow the specification of the order
// in which arguments are consumed in a formatting string.
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 1,
j = 2,
k = 3;
double x = 0.1,
y = 0.2,
z = 0.3;
char *s1 = "abc",
*s2 = "def",
*s3 = "ghi";
// If positional arguments are unspecified,
// normal input order is used.
_printf_p("%d %d %d\n", i, j, k);
// Positional args are numbers indicating the
// argument enclosed in curly braces.
_printf_p("%3$d %1$d %2$d\n", i, j, k);
// The same positional argument may be reused.
_printf_p("%1$d %2$d %1$d\n", i, j);
_printf_p("%1$s %2$s %3$s\n", s1, s2, s3);
_printf_p("%3$s %1$s %2$s\n", s1, s2, s3);
}
Vea también
Referencia
printf (Caracteres de campo de tipo)