Share via


sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l

向字符串写入设置数据格式。 其中一些的更安全版本功能可用; sprintf_s, _sprintf_s_l, swprintf_s, _swprintf_s_l参见。 swprintf 和 _swprintf_l 的安全版本不采用 count 参数。

int sprintf(
   char *buffer,
   const char *format [,
   argument] ... 
);
int _sprintf_l(
   char *buffer,
   const char *format,
   locale_t locale [,
   argument] ... 
);
int swprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument]...
);
int _swprintf_l(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
int __swprintf_l(
   wchar_t *buffer,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
);
template <size_t size>
int sprintf(
   char (&buffer)[size],
   const char *format [,
   argument] ... 
); // C++ only
template <size_t size>
int _sprintf_l(
   char (&buffer)[size],
   const char *format,
   locale_t locale [,
   argument] ... 
); // C++ only
template <size_t size>
int swprintf(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format [,
   argument]...
); // C++ only
template <size_t size>
int _swprintf_l(
   wchar_t (&buffer)[size],
   size_t count,
   const wchar_t *format,
   locale_t locale [,
   argument] ... 
); // C++ only

参数

  • buffer
    输出的存储位置

  • count
    存储的最大字符数此函数的 Unicode 版本。

  • format
    窗体控件字符串

  • argument
    可选参数

  • locale
    使用的区域设置。

有关更多信息,请参见 格式规范

返回值

编写的字符数或 – 1,如果错误。 如果 buffer 或 format 是 null 指针,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,这些函数返回 -1 并将 errno 到 EINVAL。

sprintf 返回在 buffer存储字节数,不包括终止 null 字符)。 swprintf返回在 buffer存储的宽字符数,不包括终止 null 宽字符。

备注

sprintf 函数在 buffer设置格式并存储一系列字符和值。 每 argument (如果有) 基于在 format相应的格式规范转换和输出。 该格式包括普通字符并具有窗体和功能和 printf的 format 参数相同。 null 字符从右向左书写的最后一个字符之后追加。 如果复制出现在重叠的字符串之间,该行为不确定。

安全说明安全说明

使用 sprintf,无法限制编写的字符数,这意味着,使用 sprintf 的代码易出现缓冲区溢出。考虑使用相关功能 _snprintf,指定向 buffer要写入的最大字符数,或使用 _scprintf 确定大需要缓冲。另外,请确保 format 不是用户定义的字符串。

swprintf 是 sprintf的宽字符版本;为 swprintf 的指针参数是宽字符字符串。 编码错误的检测到 swprintf 的可能与在 sprintf。 swprintf 和 fwprintf 具有相同的行为,但 swprintf 将输出写入的字符串而不是类型 FILE的目标,并且, swprintf 需要 count参数指定要写入的最大字符数。 这些功能的版本与 _l 后缀的相同,只不过它们使用区域设置参数而不是当前线程区域设置。

swprintf 符合 ISO C 标准,需要第二个参数, count,类型 size_t。 若要强制早期非标准行为,请定义 _CRT_NON_CONFORMING_SWPRINTFS。 在将来的版本中,可能取消旧行为,因此,应更改代码使用新的一致的行为。

在 C++ 中,这些函数的调用的模板重载越+新,保证这些函数副本。 有关更多信息,请参见 安全模板重载

一般文本例程映射

TCHAR.H 实例

未定义的 _UNICODE _MBCS

定义的 _MBCS

定义的 _UNICODE

_stprintf

sprintf

sprintf

swprintf

_stprintf_l

_sprintf_l

_sprintf_l

__swprintf_l

要求

实例

必需的头

sprintf, _sprintf_l

stdio.h

swprintf, _swprintf_l

stdio.h 或 wchar.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// crt_sprintf.c
// compile with: /W3
// This program uses sprintf 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( buffer,     "   String:    %s\n", s ); // C4996
   j += sprintf( buffer + j, "   Character: %c\n", c ); // C4996
   j += sprintf( buffer + j, "   Integer:   %d\n", i ); // C4996
   j += sprintf( buffer + j, "   Real:      %f\n", fp );// C4996
   // Note: sprintf is deprecated; consider using sprintf_s instead

   printf( "Output:\n%s\ncharacter count = %d\n", buffer, j );
}
  
// crt_swprintf.c
// wide character example
// also demonstrates swprintf returning error code
#include <stdio.h>

int main( void )
{
   wchar_t buf[100];
   int len = swprintf( buf, 100, L"%s", L"Hello world" );
   printf( "wrote %d characters\n", len );
   len = swprintf( buf, 100, L"%s", L"Hello\xffff world" );
   // swprintf fails because string contains WEOF (\xffff)
   printf( "wrote %d characters\n", len );
}
  

.NET Framework 等效项

系统:: 字符串:: 格式

请参见

参考

流I/O

fprintf, _fprintf_l, fwprintf, _fwprintf_l

printf, _printf_l, wprintf, _wprintf_l

scanf, _scanf_l, wscanf, _wscanf_l

sscanf, _sscanf_l, swscanf, _swscanf_l

vprintf功能