Поделиться через


_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

Записывают форматированные выходные данные с помощью указателя на список аргументов с возможностью указания порядка, в котором используются аргументы.

int _vsprintf_p(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   va_list argptr 
); 
int _vsprintf_p_l(
   char *buffer,
   size_t sizeInBytes,
   const char *format,
   locale_t locale,
   va_list argptr 
); 
int _vswprintf_p(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   va_list argptr 
);
int _vswprintf_p_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale,
   va_list argptr 
);

Параметры

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

  • sizeInBytes
    Размер buffer в символах.

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

  • format
    Спецификация формата.

  • argptr
    Указатель на список аргументов.

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

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

_vsprintf_p и _vswprintf_p возвращают число записанных символов, не включая конечный нуль-символ, или отрицательное значение, если произошла ошибка вывода.

Заметки

Каждая из этих функций принимает указатель на список аргументов, а затем форматирует и записывает заданные данные в область памяти, на которую указывает buffer.

Эти функции отличаются от vsprintf_s и vswprintf_s только тем, что они поддерживают позиционные параметры. Для получения дополнительной информации см. Позиционные параметры printf_p.

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

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

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

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

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

_MBCS определено

_UNICODE определено

_vstprintf_p

_vsprintf_p

_vsprintf_p

_vswprintf_p

_vstprintf_p_l

_vsprintf_p_l

_vsprintf_p_l

_vswprintf_p_l

Требования

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

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

Необязательные заголовки

_vsprintf_p, _vsprintf_p_l

<stdio.h> и <stdarg.h>

<varargs.h>*

_vswprintf_p, _vswprintf_p_l

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

<varargs.h>*

* Требуется для обеспечения совместимости с UNIX V.

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

Пример

// crt__vsprintf_p.c
// This program uses vsprintf_p to write to a buffer.
// The size of the buffer is determined by _vscprintf_p.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>


void example( char * format, ... )
{
    va_list  args;
    int      len;
    char     *buffer = NULL;

    va_start( args, format );

    // _vscprintf doesn't count the 
    // null terminating string so we add 1.
    len = _vscprintf_p( format, args ) + 1;

    // Allocate memory for our buffer
    buffer = (char*)malloc( len * sizeof(char) );
    if (buffer)
    {
        _vsprintf_p( buffer, len, format, args );
        puts( buffer );
        free( buffer );
    }
}


int main( void )
{
    // First example
    example( "%2$d %1$c %3$d", '<', 123, 456 );

    // Second example
    example( "%s", "This is a string" );
}
  

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

System::String::Format

См. также

Ссылки

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

Функции vprintf

Синтаксис описания формата: функции printf и wprintf

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

va_arg, va_copy, va_end, va_start