_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 等效项
请参见
参考
_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