_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指针,如果计数为零,或者,如果格式字符串包含无效的格式字符,则无效参数的处理程序如 参数验证所述被调用。 如果允许继续执行,则这些函数返回-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

请参见

参考

流 I/O

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