Składnia specyfikacji formatu: funkcje printf i wprintf
W tym artykule opisano składnię formatowania argumentów ciągu dla printf, wprintf funkcji pokrewnych.Dostępne są bezpieczniejsze wersje tych funkcji; aby uzyskać więcej informacji, zobacz Funkcje zabezpieczeń w CRT.Aby uzyskać informacje dotyczące poszczególnych funkcji, zobacz dokumentację tych określonych funkcji.Aby uzyskać listę tych funkcji, zobacz We/Wy strumienia.
Specyfikacja formatu, który składa się z pól opcjonalnych i wymaganych, przyjmuje następującą postać:
%[flags] [width] [.precision] [{h | l | ll | w | I | I32 | I64}] type
Każde pole specyfikacji formatu jest znakiem lub liczbą, która oznacza określoną opcję formatu lub specyfikator konwersji.Wymagany znak type określa rodzaj konwersji, która ma być zastosowana do argumentu.Opcjonalne pola flags, width i precision kontrolują dodatkowe aspekty formatu.Specyfikacja formatu podstawowego zawiera tylko znak procentu i znak type, na przykład %s, który określa konwersję ciągu.Jeśli po znaku procentu następuje znak, który nie ma znaczenia jako pole formatu, znak zostanie skopiowany do wyjścia bez zmian.Aby wydrukować znak procentu, użyj %%.
Pola specyfikacji formatu kontrolują następujące aspekty formatowania i konwersji argumentów:
type
Wymagany znak specyfikatora konwersji, który określa, czy skojarzony argument ma być interpretowany jako znak, ciąg, liczba całkowita lub liczba zmiennoprzecinkowa.Aby uzyskać więcej informacji, zobacz printf — Znaki pola typu.flags
Opcjonalny znak lub znaki, które kontrolują wyrównanie i wyjście znaków, spacji, zer wiodących, separatorów dziesiętnych i prefiksów ósemkowych oraz szesnastkowych.Aby uzyskać więcej informacji, zobacz Dyrektywy flagowania.W specyfikacji formatu może pojawić się więcej niż jedna flaga, a flagi mogą występować w dowolnej kolejności.width
Opcjonalna liczba dziesiętna, która określa minimalną liczbę znaków, które są przekazywane na wyjście.Aby uzyskać więcej informacji, zobacz printf — Specyfikacje szerokości.precision
Opcjonalna liczba dziesiętna, która określa maksymalną liczbę drukowanych znaków w przypadku ciągów, liczbę cyfr znaczących lub liczbę cyfr po znaku przecinka dziesiętnego w przypadku wartości zmiennoprzecinkowych lub minimalną liczbę cyfr, które są drukowane w przypadku wartości całkowitych.Aby uzyskać więcej informacji, zobacz "Jak wartości precyzji wpływają na typ" w Specyfikacja dokładności.h | l | ll | w | I | I32 | I64
Opcjonalne prefiksy do type określające rozmiar odpowiadającego argumentu.Aby uzyskać więcej informacji, zobacz "Prefiksy rozmiarów" w Specyfikacja rozmiaru.
Uwaga dotycząca zabezpieczeń |
---|
Upewnij się, że ciągi specyfikacji formatu nie są zdefiniowane przez użytkownika.Rozważmy na przykład program, który prosi użytkownika o wprowadzenie nazwy i przechowuje dane wejściowe w zmiennej ciągu o nazwie name.Aby wydrukować name, nie należy tego robić w ten sposób: printf( name ); /* Danger! If name contains "%s", program will crash */ Zamiast tego, należy wykonać: printf( "%s", name ); |
Zobacz też
Informacje
printf, _printf_l, wprintf, _wprintf_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_l