swprintf ()- 将宽字符格式化并写入缓冲区

格式

#include <wchar.h>
int swprintf(wchar_t *wcsbuffer, size_t n,
             const wchar_t *format, argument-list);

语言级别

ANSI

线程安全

语言环境敏感

此函数的行为可能受当前语言环境的 LC_CTYPE 和 LC_NUMERIC 类别影响。 如果在编译命令上指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么此行为也可能受到当前语言环境的 LC_UNI_CTYPE 和 LC_UNI_NUMERIC 类别的影响。 当在编译命令上指定 LOCALETYPE (*CLD) 时,此功能不可用。 有关更多信息,请参阅 了解 CCSID 和语言环境

宽字符函数

有关更多信息,请参阅 宽字符

描述

swprintf() 函数将一系列宽字符和值格式化并存储到宽字符缓冲区 wcsbuffer中。 swprintf() 函数等同于 sprintf() 函数,只不过它对宽字符进行操作。

n 指定要写入的最大宽字符数,包括结束空字符。 swprintf() 函数根据格式中相应的宽字符格式说明符来转换自变量列表中的每个条目。 格式具有与 printf() 函数的格式字符串相同的格式和函数,但以下情况除外:

  • %c (不带 l 前缀) 将字符自变量转换为 wchar_t ,就像通过调用 mbtowc() 函数一样。
  • %lc 和 %C 将 wchar_t 复制到 wchar_t。 %#lc 和%#C 分别等同于 %lc 和 %C。
  • %s (不带 l 前缀) 将多字节字符数组转换为 wchar_t 数组,就像调用 mbstowcs() 函数一样。 除非精度指定较短的输出,否则将数组写入到结束空字符,但不包括结束空字符。
  • %ls 和 %S 复制 wchar_t 的数组 (无转换)。 除非精度指定较短的输出,否则数组将写入到结束 NULL 字符,但不包括该字符。 %#ls 和%#S 分别相当于 %ls 和 %S。

宽度和精度始终是宽字符。

在写入的宽字符末尾添加空宽字符; 空宽字符不作为返回值的一部分。 如果在重叠的对象之间进行复制,那么行为未定义。

返回值

swprintf() 函数返回写入输出缓冲区的宽字符数,如果迂到错误,那么不计算结束空宽字符或负值。 如果请求写入 n 个或更多宽字符,那么将返回负值。

errno 的值可能设置为 EINVAL,参数无效。

示例

此示例使用 swprintf() 函数来格式化多个值并将其打印到缓冲区。
#include <wchar.h>
#include <stdio.h>
 
#define BUF_SIZE 100
 
int main(void)
{
   wchar_t wcsbuf[BUF_SIZE];
   wchar_t wstring[] = L"ABCDE";
   int     num;
 
   num = swprintf(wcsbuf, BUF_SIZE, L"%s", "xyz");
   num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%ls", wstring);
   num += swprintf(wcsbuf + num, BUF_SIZE - num, L"%i", 100);
   printf("The array wcsbuf contains: \"%ls\"\n", wcsbuf);
   return 0;
 
   /***************************************************************
      The output should be similar to :
 
      The array wcsbuf contains: "xyzABCDE100"
   ***************************************************************/
}

相关信息