Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Parametrów pozycyjne zapewniają możliwość określony numerem, który z argumentów należy zastąpić w polu w ciągu formatu.Następujący parametr pozycyjne printf dostępne są funkcje:
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
Określanie parametrów pozycyjne
Parametr indeksowania
Domyślnie funkcje pozycyjne zachowują się identycznie do pozycji innych niż te, jeśli pozycyjne formatowanie nie jest obecny.Parametry pozycyjne są określane przy użyciu formatu "%m$x", gdzie m oznacza numeryczne liczbę porządkową wskazujące położenie parametru na liście parametrów, poprzedzających ciąg formatu i x wskazuje typ znaków pola Typ określony w printf funkcji.Parametry na liście są indeksowane począwszy od wartości 1 dla pierwszego elementu na liście i tak dalej.Aby uzyskać dodatkowe informacje dotyczące znaków pola Typ, zobacz printf — Znaki pola typu.
Na przykład ten problem:
_printf_p("%1$s %2$s", "November", "10");
zostanie wydrukowany
November 10
Kolejność numerów używanych brak tej konieczności Kolejność argumentów, biorąc pod uwagę.Zatem ważne jest następujące:
_printf_p("%2$s %1$s", "November", "10");
zostanie wydrukowany
10 November
Parametr może być używane więcej niż raz podczas formatowania, inaczej niż w tradycyjnych format ciągów, tak że
_printf_p("%{1$d times %1$d is %2$d", 10, 100);
zostanie wydrukowany
10 times 10 is 100
Jednak wszystkie argumenty stosuje się co najmniej raz gdzieś w ciągu formatu.
Maksymalna liczba dozwolonych w ciągu formatu parametrów pozycyjne wyraża się przez _ARGMAX.
Przewidywanie i szerokość
Gdy * symbol jest używana do określenia, że szerokość lub precision jest ustalane na podstawie argumentu, a następnie pozycję wartości szerokości lub przewidywanie musi znajdować się bezpośrednio po * symbol.Na przykład:
_printf_p("%1$*2$s","Hello", 10);
lub
_printf_p("%2$*1$s",10, "Hello");
Mieszanie pozycyjne i innych niż argumenty pozycyjne
Parametrów pozycyjne nie mogą być mieszane z parametrami pozycyjne w ten sam ciąg formatu. Jednakże printf_s i pokrewne funkcje nadal obsługuje parametrów pozycyjne format ciągów zawierających nie parametrów pozycyjne.
Przykład
// 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);
}