fprintf_s, _fprintf_s_l, fwprintf_s, _fwprintf_s_l

Печатает форматированные данные в поток. Эти функции — это версии fprintf, fwprintf_fprintf_lс улучшениями безопасности, _fwprintf_l как описано в функциях безопасности в CRT.

Синтаксис

int fprintf_s(
   FILE *stream,
   const char *format [,
   argument_list ]
);
int _fprintf_s_l(
   FILE *stream,
   const char *format,
   _locale_t locale [,
   argument_list ]
);
int fwprintf_s(
   FILE *stream,
   const wchar_t *format [,
   argument_list ]
);
int _fwprintf_s_l(
   FILE *stream,
   const wchar_t *format,
   _locale_t locale [,
   argument_list ]
);

Параметры

stream
Указатель на структуру FILE .

format
Строка управления форматом.

argument_list
Необязательные аргументы в строке форматирования.

locale
Используемый языковой стандарт.

Возвращаемое значение

fprintf_s возвращает число записанных байтов. fwprintf_s возвращает число записанных расширенных символов. В случае ошибки вывода каждая из этих функций возвращает отрицательное значение.

Замечания

Функция fprintf_s форматирует и выводит набор символов и значений в выходной поток stream. Каждый аргумент в argument_list (если таковой) преобразуется и выводится в соответствии с соответствующей спецификацией формата.format Аргумент format использует синтаксис спецификации формата для printf и wprintf функций.

fwprintf_s — версия функции fprintf_s для расширенных символов; в функции fwprintf_s параметр format — это строка расширенных символов. Эти функции ведут себя одинаково, если поток открыт в режиме ANSI. Функция fprintf_s на данный момент не поддерживает вывод данных в поток в кодировке Юникод.

Версии этих функций с суффиксом _l идентичны, за исключением того, что они используют переданный параметр языкового стандарта вместо текущего языкового стандарта.

Важно!

Убедитесь, что format не является строкой, определяемой пользователем.

Начиная с Windows 10 версии 2004 (сборка 19041), printf семейство функций выводит точно представленные числа с плавающей запятой в соответствии с правилами IEEE 754 для округления. В предыдущих версиях Windows точно представленные числа с плавающей запятой, заканчивающиеся на "5", всегда округлялись. IEEE 754 утверждает, что они должны округлиться до ближайшей даже цифры (также известной как "Округление банкира"). Например, оба printf("%1.0f", 1.5) и printf("%1.0f", 2.5) должны округлиться до 2. Ранее 1,5 округляет до 2 и 2,5 округления до 3. Это изменение влияет только на точно представленные числа. Например, 2.35 (который при представлении в памяти приближается к 2,3500000000000000008) продолжает округляется до 2,4. Округление, выполняемое этими функциями, теперь также учитывает режим округления с плавающей запятой, заданный fesetround. Ранее округление всегда выбрало FE_TONEAREST поведение. Это изменение влияет только на программы, созданные с помощью Visual Studio 2019 версии 16.2 и более поздних версий. Чтобы использовать устаревшее поведение округления с плавающей запятой, свяжите ссылку с "legacy_stdio_float_rounding.obj".

Как и небезопасные версии (см_fprintf_lfprintf. , fwprintf), _fwprintf_lэти функции проверяют свои параметры и вызывают обработчик недопустимых параметров, как описано в описании проверки параметров, если какой-либо stream или format является NULL указателем. Сама строка формата также проверяется. При наличии любых неизвестных или неправильно сформированных описателей форматирования эти функции создают исключение недопустимого параметра. Во всех случаях, если выполнение может быть продолжено, функции возвращают –1 и устанавливают параметр errno в значение EINVAL. Дополнительные сведения о кодах возврата см. в разделе errno, _doserrno_sys_errlistи _sys_nerr.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определен _MBCS Определенные _UNICODE Определенные
_ftprintf_s fprintf_s fprintf_s fwprintf_s
_ftprintf_s_l _fprintf_s_l _fprintf_s_l _fwprintf_s_l

Дополнительные сведения см. в разделе "Синтаксис спецификации формата".

Требования

Функция Обязательный заголовок
fprintf_s, _fprintf_s_l <stdio.h>
fwprintf_s, _fwprintf_s_l <stdio.h> или <wchar.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// crt_fprintf_s.c
// This program uses fprintf_s to format various
// data and print it to the file named FPRINTF_S.OUT. It
// then displays FPRINTF_S.OUT on the screen using the system
// function to invoke the operating-system TYPE command.

#include <stdio.h>
#include <process.h>

FILE *stream;

int main( void )
{
   int    i = 10;
   double fp = 1.5;
   char   s[] = "this is a string";
   char   c = '\n';

   fopen_s( &stream, "fprintf_s.out", "w" );
   fprintf_s( stream, "%s%c", s, c );
   fprintf_s( stream, "%d\n", i );
   fprintf_s( stream, "%f\n", fp );
   fclose( stream );
   system( "type fprintf_s.out" );
}
this is a string
10
1.500000

См. также

Потоковый ввод-вывод
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
fscanf, _fscanf_l, fwscanf, _fwscanf_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l