vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
Форматированный вывод записью с помощью указатель на список аргументов.Более безопасные версии этих функций доступны; см. vsprintf_s, _vsprintf_s_l, vswprintf_s, _vswprintf_s_l.
int vsprintf(
char *buffer,
const char *format,
va_list argptr
);
int _vsprintf_l(
char *buffer,
const char *format,
locale_t locale,
va_list argptr
);
int vswprintf(
wchar_t *buffer,
size_t count,
const wchar_t *format,
va_list argptr
);
int _vswprintf_l(
wchar_t *buffer,
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
);
int __vswprintf_l(
wchar_t *buffer,
const wchar_t *format,
locale_t locale,
va_list argptr
);
template <size_t size>
int vsprintf(
char (&buffer)[size],
const char *format,
va_list argptr
); // C++ only
template <size_t size>
int _vsprintf_l(
char (&buffer)[size],
const char *format,
locale_t locale,
va_list argptr
); // C++ only
template <size_t size>
int vswprintf(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
va_list argptr
); // C++ only
template <size_t size>
int _vswprintf_l(
wchar_t (&buffer)[size],
size_t count,
const wchar_t *format,
locale_t locale,
va_list argptr
); // C++ only
Параметры
buffer
Место хранения для вывода.count
Максимальное число символов, которые необходимо сохранить в UNICODE версия этой функции.format
Спецификация формата.argptr
Указатель на список аргументов.locale
Языковой стандарт, который необходимо использовать.
Возвращаемое значение
vsprintf и vswprintf возвращает число записанных символов, не включая конечное нуль-символ или отрицательное значение, если происходит ошибка вывода.If buffer OR format указатель null, эти функции вызывает обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если выполнение может быть продолжено, то эти функции возвращают -1 и задают errno В EINVAL.
Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.
Заметки
Каждая из этих функций принимает указатель на список аргументов, а затем форматы и записывает заданный данных в памяти, на by buffer.
Версии этих функций с _l суффикс идентичны за исключением того, что они используют параметр, переданный вместо языкового стандарта текущего языкового стандарта потока.
Примечание по безопасности |
---|
Использование vsprintf, здесь нет возможности ограничить число записанных символов. это означает, что код с помощью этой функции впечатлителен к заскокам буфера.Используйте _vsnprintf вместо этого или вызов _vscprintf определить размер буфера не требуется.Кроме того, убедитесь, то format не является определяемой пользователем строкой.Дополнительные сведения см. в разделе Исключение переполнения буфера. |
vswprintf соответствует стандарту ISO, c#, который требует второго параметра countтипа size_t.Для принудительного старую нештатную расширения функциональности, укажите _CRT_NON_CONFORMING_SWPRINTFS. Старая функциональности может находиться в следующих версиях, поэтому код должен быть изменен для использования новой conformant расширения функциональности.
В C++, эти функции имеют перегруженные версии шаблона, вызывающих более новые безопасные аналогом этих функций.Дополнительные сведения см. в разделе Предоставляйте перегруженный шаблона.
Сопоставления подпрограммы Родов-Текста
Подпрограмма TCHAR.H |
_MBCS не заданные _UNICODE & |
Указанный символ _MBCS |
Указанный _UNICODE |
---|---|---|---|
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_l |
_vsprintf_l |
_vsprintf_l |
_vswprintf_l |
Требования
Процедура |
Обязательный заголовок |
Необязательные заголовки |
---|---|---|
vsprintf, _vsprintf_l |
<stdio.h> и <stdarg.h> |
<varargs.h>* |
vswprintf, _vswprintf_l |
<stdio.h> OR <wchar.h>и <stdarg.h> |
<varargs.h>* |
* Требуется для совместимости UNIX v.
Дополнительные сведения о совместимости см. Совместимость во введении.
Пример
// crt_vsprintf.c
// compile with: /W3
// This program uses vsprintf to write to a buffer.
// The size of the buffer is determined by _vscprintf.
#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>
void test( char * format, ... )
{
va_list args;
int len;
char *buffer;
// retrieve the variable arguments
va_start( args, format );
len = _vscprintf( format, args ) // _vscprintf doesn't count
+ 1; // terminating '\0'
buffer = (char*)malloc( len * sizeof(char) );
vsprintf( buffer, format, args ); // C4996
// Note: vsprintf is deprecated; consider using vsprintf_s instead
puts( buffer );
free( buffer );
}
int main( void )
{
test( "%d %c %d", 123, '<', 456 );
test( "%s", "This is a string" );
}
Эквивалент в .NET Framework
См. также
Ссылки
Синтаксис описания формата: функции printf и wprintf
fprintf, _fprintf_l, fwprintf, _fwprintf_l
printf, _printf_l, wprintf, _wprintf_l