Печатает отформатированный вывод в стандартном потоке вывода данных (функция библиотеки С и С++).
int printf( const char *format [, argument]... );int wprintf( const wchar_t *format [, argument]... ); |
Управление форматом.
argumentДополнительные параметры.
Возвращает число напечатанных символов или отрицательное значение, если происходит ошибка.
Функция printf форматирует и печатает ряд символов и значений в стандартном потоке вывода данных - stdout. Если параметры следуют за строкой format, то форматирующая (format) строка должна содержать спецификации, которые определяют формат вывода для параметров. Функции printf и fprintf ведут себя тождественно за исключением того, что printf печатает выводимые данные stdout, а не в целевой тип файла (FILE).
Функция wprintf - широкосимвольная версия printf (для Unicode); format - широкосимвольная строка. Функции wprintf и printf во всем остальном ведут себя тождественно.
Унифицированно-текстовые стандартные отображения
Стандартный TCHAR.H |
_UNICODE & _MBCS не определен |
_MBCS определен | _unicode определен |
---|---|---|---|
_tprintf | printf | printf | wprintf |
Параметр format состоит из обычных символов, последовательностей escape, и (если параметры следуют за параметром format), то спецификации формата. Обычные символы и последовательности escape копируются в stdout в порядке их поступления. Например, строка
printf("Line one\n\t\tLine two\n"); |
создает вывод
Line one Line two |
Спецификации формата всегда начинаются со знака процента (%) и читается слева направо. Когда функция printf встречается с первой спецификацией формата (если она есть), то преобразует значение первого параметра после format и выводит его соответственно. Вторая спецификация формата заставляет второй параметр быть преобразованным и выведенным, и так далее. Если имеется больше параметров, чем есть их спецификаций, дополнительные параметры игнорируются. Результаты не определяются, если недостаточно параметров для всех спецификаций формата.
Поля спецификации формата: функции printf и wprintfCпецификации формата, которые состоят из дополнительных и затребованных полей, имеют нижеследующую форму:
%[flags] [width] [.precision] [{h | l | I | I32 | I64}]type
Каждое поле спецификации формата - это единичный символ или число, показывающее конкретный вариант выбора формата. Самая простая спецификация формата содержит в себе только знак процента и символ типа - type (например, %s). Если знак процента сопровождается символом, у которого нет никакого значения как поля формата, символ копируется в stdout. Например, чтобы напечатать символ знака процента, используйте %%.
Дополнительные поля, которые показываются перед символом type, управляют другими аспектами форматирования, следующим образом:
typeЗатребованный символ, который определяет, понимается ли связанный параметр как символ, строка или число (см. таблицу Поля типов символов printf.
flagsДополнительный символ или символы, которые управляют выравниванием вывода данных и печати знаков, пробелов, десятичных запятых, и октальных и шестнадцатеричных префиксов (см. таблицу Флажки символов). Более чем один флажок может применяться в спецификации формата.
widthДополнительное число, которое указывает минимальное число выводимых символов (см. printf - Спецификация ширины).
precisionДополнительное число, которое указывает максимальное число символов, напечатанных для всех или части полей вывода, или минимальное число цифр, напечатанных для целого значения (см.таблицу Как значения точности оказывают влияние на тип символа).
h | l | I | I32 | I64Дополнительные префиксы для type, которые указывают размер параметра (см. таблицу Префиксы размера для printf и wprintf Спецификаторов типа формата).
Замечание по обеспечению безопасности! Убедитесь, что строки спецификации формата не определяемы пользователем. Например, рассмотрите программу, которая побуждает пользователя вводить свое имя и хранить вводимые данные в переменной строке, называемой
name. Чтобы напечатать name, не делайте того, что ниже:printf( name ); // Опасность! Если имя будет содержать "%s", то программа потерпит крах Вместо этого сделайте вот это: printf( "%s", name ); |
Демонстрационный пример
// crt_printf.c /* Эта программа использует функции printf и wprintf * чтобы выполнить форматированный вывод данных. */ #include <stdio.h> int main( void ) { char ch = 'h', *string = "computer"; int count = -9234; double fp = 251.7366; wchar_t wch = L'w', *wstring = L"Unicode"; /* Показывает целые числа. */ printf( "Integer formats:\n" " Decimal: %d Justified: %.6d Unsigned: %u\n", count, count, count, count ); printf( "Decimal %d as:\n Hex: %Xh C hex: 0x%x Octal: %o\n", count, count, count, count ); /* Показывает в различных основаниях системы счисления. */ printf( "Digits 10 equal:\n Hex: %i Octal: %i Decimal: %i\n", 0x10, 010, 10 ); /* Показывает символы. */ printf("Characters in field (1):\n%10c%5hc%5C%5lc\n", ch, ch, wch, wch); wprintf(L"Characters in field (2):\n%10C%5hc%5c%5lc\n", ch, ch, wch, wch); /* Показывает строки. */ printf("Strings in field (1):\n%25s\n%25.4hs\n %S%25.3ls\n", string, string, wstring, wstring); wprintf(L"Strings in field (2):\n%25S\n%25.4hs\n %s%25.3ls\n", string, string, wstring, wstring); /* Показывает действительные числа. */ printf( "Real numbers:\n %f %.2f %e %E\n", fp, fp, fp, fp ); /* Показывает указатели. */ printf( "\nAddress as: %p\n", &count); /* Подсчет выведенных для печати символов. */ printf( "\nDisplay to here:\n" ); printf( "1234567890123456%n78901234567890\n", &count ); printf( " Number displayed: %d\n\n", count ); } Вывод данныхФорматы целых чисел: Десятичный: -9234 Выравненный: -009234 Беззнаковый: 4294958062 Десятичный -9234 как: Hex(шестнадцатиричный): FFFFDBEEh C hex: 0xffffdbee Octal(восьмиричный): 37777755756 Цифра 10 эквивалентна: Hex: 16 Octal: 8 Decimal: 10 Символов в поле (1): h h w w Символов в поле (2): h h w w Строк в поле (1): computer comp Unicode Uni Строк в поле (2): computer comp Unicode Uni Действительные числа: 251.736600 251.74 2.517366e+002 2.517366E+002 Адрес как: 0012FEE0 Вывод на экран здесь: 123456789012345678901234567890 Число показанное на экране: 16 |
Процедуры поддержки плавающей запятой | Процедуры потоков ввода-вывода (I/O) | Локальные процедуры | функции fopen | fprintf | scanf | sprintf | vprintf | Процедуры времени исполнения программы и эквиваленты .NET Framework
Процедуры |
Требуется заголовочный файл |
Совместимость |
---|---|---|
printf | <stdio.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
wprintf | <stdio.h> или <wchar.h> | ANSI, Win 98, Win Me, Win NT, Win 2000, Win XP |
Дополнительную информацию о совместимости см. в статье Совместимость в главе Введение.
Все версии библиотек времени исполнения программы C.