为一个字符串写入设置数据能够指定排序参数用于格式字符串。
int _sprintf_p(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format [,
   argument] ... 
);
int _sprintf_p_l(
   char *buffer,
   size_t sizeOfBuffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int _swprintf_p(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format [,
   argument]...
);
int _swprintf_p_l(
   wchar_t *buffer,
   size_t sizeOfBuffer,
   const wchar_t *format,
   locale_t locale [,
   argument] … 
);
参数
buffer
输出的存储位置sizeOfBuffer
存储的最大字符数。format
窗体控件字符串argument
可选参数locale
使用的区域设置。
有关更多信息,请参见 格式规范。
返回值
编写的字符数或 – 1,如果错误。
备注
_sprintf_p函数在 buffer设置格式并存储一系列字符和值。每 argument (如果有) 基于在 format相应的格式规范转换和输出。该格式包括普通字符并具有窗体和功能和 printf_p的 format 参数相同。NULL 字符从右向左书写的最后一个字符之后追加。如果复制出现在重叠的字符串之间,该行为不确定。在 _sprintf_p 和 sprintf_s 的不同之处在于 _sprintf_p 支持位置参数,允许指定命令参数用于格式字符串。有关更多信息,请参见 printf_p位置参数。
_swprintf_p 是 _sprintf_p的宽字符版本;为 _swprintf_p 的指针参数是宽字符字符串。编码错误的检测到 _swprintf_p 的可能与在 _sprintf_p。_swprintf_p 和 fwprintf_p 具有相同的行为,但 _swprintf_p 将输出写入的字符串而不是类型 FILE的目标,并且, _swprintf_p 需要 count参数指定要写入的最大字符数。这些功能的版本与 _l 后缀的相同,只不过它们使用区域设置参数而不是当前线程区域设置。
_sprintf_p 返回在 buffer存储字节数,不包括终止的 NULL 字符。_swprintf_p返回在 buffer存储的宽字符数,不包括终止的 NULL 宽字符。如果 buffer 或 format 是 null 指针,或者,如果格式字符串包含无效格式字符,无效参数调用处理程序,如 参数验证所述。如果执行允许继续,这些函数返回 -1 并将 errno 到 EINVAL。
一般文本例程映射
TCHAR.H 实例  | 
未定义的 _UNICODE _MBCS  | 
定义的 _MBCS  | 
定义的 _UNICODE  | 
|---|---|---|---|
_stprintf_p  | 
_sprintf_p  | 
_sprintf_p  | 
_swprintf_p  | 
_stprintf_p_l  | 
_sprintf_p_l  | 
_sprintf_p_l  | 
_swprintf_p_l  | 
要求
实例  | 
必需的头  | 
|---|---|
_sprintf_p, _sprintf_p_l  | 
stdio.h  | 
_swprintf_p, _swprintf_p_l  | 
stdio.h 或 wchar.h  | 
有关其他的兼容性信息,请参见中介绍的 兼容性 。
示例
// crt_sprintf_p.c
// This program uses _sprintf_p 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_p( buffer, 200,
                     "   String:    %s\n", s );
    j += _sprintf_p( buffer + j, 200 - j, 
                     "   Character: %c\n", c );
    j += _sprintf_p( buffer + j, 200 - j, 
                     "   Integer:   %d\n", i );
    j += _sprintf_p( buffer + j, 200 - j, 
                     "   Real:      %f\n", fp );
    printf( "Output:\n%s\ncharacter count = %d\n", 
            buffer, j );
}
// crt_swprintf_p.c
// This is the wide character example which
// also demonstrates _swprintf_p returning
// error code.
#include <stdio.h>
#define BUFFER_SIZE 100
int main( void )
{
    wchar_t buffer[BUFFER_SIZE];
    int     len;
    len = _swprintf_p(buffer, BUFFER_SIZE, L"%2$s %1$d",
                      0, L" marbles in your head.");
    _printf_p( "Wrote %d characters\n", len );
    
    // _swprintf_p fails because string contains WEOF (\xffff)
    len = _swprintf_p(buffer, BUFFER_SIZE, L"%s", 
                      L"Hello\xffff world" );
    _printf_p( "Wrote %d characters\n", len );
}
.NET Framework 等效项
请参见
参考
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
printf, _printf_l, wprintf, _wprintf_l
scanf, _scanf_l, wscanf, _wscanf_l
sscanf, _sscanf_l, swscanf, _swscanf_l