_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 等效项
请参见
参考
fprintf、_fprintf_l、fwprintf、_fwprintf_l
printf、_printf_l、wprintf、_wprintf_l