sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

Запись форматированных данных в строку. Существуют более безопасные версии некоторых из этих функций; см. раздел sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l. Безопасные версии swprintf и _swprintf_l не принимают параметр count.

int sprintf(
   char *buffer,
   const char *format [,
   argument] ... 
);
int _sprintf_l(
   char *buffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf(
   wchar_t (&buffer)[size],
   const wchar_t *format [,
   argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
   wchar_t (&buffer)[size],
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

Параметры

  • buffer
    Место хранения выходных данных

  • count
    Максимальное число символов для хранения в версии Юникода для этой функции.

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

  • argument
    Необязательные аргументы

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

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

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

Записанное число символов или –1 в случае возникновения ошибки. Если buffer или format является пустым указателем, то вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, эти функции возвращают -1 и устанавливают errno в значение EINVAL.

sprintf возвращает число байтов, сохраненных в buffer без учета завершающего символа null. swprintfвозвращает число расширенных символов, сохраненных в buffer, без учета завершающего расширенного символа null.

Заметки

Функция sprintf форматирует и сохраняет набор символов и значений в buffer. Каждый argument (если он есть) преобразуется и выводится согласно соответствующей спецификацией формата в format. Формат состоит из обычных символов и имеет те же форму и функциональные возможности, что и аргумент format для printf. После последнего написанного символа добавляется символ null. Если копирование производится между перекрывающимися строками, поведение не определено.

Примечание о безопасностиПримечание по безопасности

С помощью sprintf, не существует способа ограничения, записанные количество символов, что означает, что код с помощью sprintf восприимчивым к переполнениям буфера.Рассмотрите возможность использования связанной функции _snprintf, которая указывает максимальное количество символов, записываемое в buffer, или используйте _scprintf для определения требуемой величины буфера.Также убедитесь, что format не является строкой, определяемой пользователем.

swprintf — это двухбайтовая версия sprintf; аргументы указателя для swprintf представляют собой двухбайтовые строки. Обнаружение ошибок кодирования в swprintf может отличаться от обнаружения ошибок в sprintf. swprintf и fwprintf ведут себя идентично за исключением случаев, когда swprintf записывает вывод в строку, а не в назначение типа FILE, и swprintf требует, чтобы параметр countзадавал максимальное число знаков для записи. Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

swprintf соответствует стандарту ISO C, который требует второго параметра count типа size_t. Чтобы принудительно использовать старое нестандартное поведение, укажите значение _CRT_NON_CONFORMING_SWPRINTFS. В будущей версии, старое расширение функциональности может быть удалена, поэтому код должен быть изменен для использования нового соответствующих расширения функциональности.

В C++ эти функции имеют шаблонные перегрузки, которые вызывают более новые и безопасные аналоги этих функций. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Универсальное текстовое сопоставление функций

Подпрограмма TCHAR.H

_UNICODE & _MBCS не определены

_MBCS определено

_UNICODE определено

_stprintf

sprintf

sprintf

swprintf

_stprintf_l

_sprintf_l

_sprintf_l

__swprintf_l

Требования

Подпрограмма

Обязательный заголовок

sprintf, _sprintf_l

<stdio.h>

swprintf, _swprintf_l

<stdio.h> или <wchar.h>

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

Пример

// crt_sprintf.c
// compile with: /W3
// This program uses sprintf to format various
// data and place them in the string named buffer.

#include <stdio.h>

int main( void )
{
   char  buffer[200], s[] = "computer", c = 'l';
   int   i = 35, j;
   float fp = 1.7320534f;

   // Format and print various data: 
   j  = sprintf( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

Эквивалент в .NET Framework

System::String::Format

См. также

Ссылки

Потоковый ввод-вывод

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

Функции vprintf