_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l

为一个字符串写入设置数据能够指定排序参数用于格式字符串。

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 等效项

系统:: 字符串:: 格式

请参见

参考

流I/O

_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

sscanf_s, _sscanf_s_l, swscanf_s, _swscanf_s_l

vprintf功能

printf_p位置参数