printf_p Konumsal Parametreler
Konumsal parametre olan bağımsız bir biçim dizesi alanına değiştirilecek numarasına göre belirleme olanağı sağlar.Aşağıdaki konum parametresi printf işlevleri kullanılabilir:
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
Konumsal parametrelerini belirtme
Parametre dizin oluşturma
Konumsal bir biçimlendirme yok varsa, varsayılan olarak Konumsal işlev olmayan bir konuma olanlar, aynı şekilde davranır.Konumsal parametre biçimi kullanılarak belirtilir "%m$x" burada m parametre önceki biçim dizesi parametreleri listesindeki konumunu gösteren sayısal bir sıralı sayı gösterir ve x belirtilen alan karakter türü gösterir printf işlev.Parametre listesinde, listedeki ilk öğe 1 değerini vb. başlayarak dizine eklenir.Tür alanı karakterleri ile ilgili ek bilgi için bkz: printf Türü Alan Karakterleri.
Bu davranış, örneğin:
_printf_p("%1$s %2$s", "November", "10");
yazdırır
November 10
Kullanılan numaralar sırasını verilen bağımsız eşleşmesi değil.Bu nedenle geçerli aşağıdadır:
_printf_p("%2$s %1$s", "November", "10");
yazdırır
10 November
Parametre kullanılır ve birden çok kez biçimlendirirken, aksine geleneksel olarak biçimlendirme dizeleri, böylece o
_printf_p("%{1$d times %1$d is %2$d", 10, 100);
yazdırır
10 times 10 is 100
Ancak, tüm bağımsız bir yerde en az bir kez Biçim dizesinde kullanılmalıdır.
Konumsal parametre bir biçim dizesi için izin verilen en fazla sayısını tarafından verilen _ARGMAX.
Genişlik ve Prevision
Zaman * sembol genişlik veya duyarlık argüman belirlenecek olduğunu belirtmek için kullanılır, daha sonra genişlik veya prevision değerin konumunu hemen aşağıdaki görünmelidir, aksi halde * simgesi.Örnek:
_printf_p("%1$*2$s","Hello", 10);
veya
_printf_p("%2$*1$s",10, "Hello");
Karıştırma konumsal ve olmayan konumsal bağımsız değişkenleri
Konumsal parametre konumsal olmayan aynı biçim dizesi parametrelerinde ile karışabilir. Ancak, printf_s ve ilgili işlevlerin desteklemeye devam konumsal olmayan parametreler konumsal parametre içeren biçim dizeleri.
Örnek
// 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);
}