vswprintf
函数 <cwchar>
int vswprintf (wchar_t * ws, size_t len, const wchar_t * format, va_list arg );
将格式化的数据从变量参数列表写入特定大小的缓冲区
使用与wprintf上使用format时打印的相同的文本组成字符串,
但使用arg的变量参数列表中的元素而不是附加函数参数,
并将结果内容作为C宽字符串存储在ws指向的缓冲区中(以len作为要填充的最大缓冲区容量,
以宽字符表示)。
如果得到的字符串长度超过len-1个宽字符,则丢弃其余字符,不存储。
在内部,函数从arg标识的列表中检索参数,就像在它上面使用了va_arg一样,因此arg的状态很可能会被调用改变。
在任何情况下,arg都应该在调用之前的某个点被va_start初始化,并且它应该在调用之后的某个点被va_end释放。
这相当于 vsnprintf(<cstdio>)的宽字符版本。
☲ 参数
ws
指向缓冲区的指针,生成的C宽字符串存储在这里。
缓冲区的大小应该至少为len个宽字符。
len
要写入缓冲区的最大宽字符数。
生成的字符串长度最多为len-1,为额外的结束空宽字符留下空间。
Size_t是一个无符号整型。
format
C宽字符串,包含一个格式字符串,
该格式字符串遵循与printf格式相同的规范(有关详细信息,请参阅printf)。
注意,所有格式说明符都具有与printf相同的含义;
因此,应使用%lc写入宽字符(而不是%c),以及应使用%ls宽字符串(而不是%s)。
arg
一个值,标识用va_start初始化的变量参数列表。
Va_list是<cstdarg>中定义的特殊类型
☉ 返回值
如果成功,则返回所写的字符总数。此数不包括自动附加在字符串末尾的其他空字符。
如果发生读取错误或在读取时到达文件结束,则设置正确的指示符(feof或ferror)。
并且,如果任何一种情况发生在任何数据可以成功读取之前,则返回EOF。
如果失败,将返回一个负数,包括写入ws的结果字符串将超过len个字符。
☣ 示例
/* vswprintf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
void PrintWide ( const wchar_t * format, ... )
{
wchar_t buffer[256];
va_list args;
va_start ( args, format );
vswprintf ( buffer, 256, format, args );
fputws ( buffer, stdout );
va_end ( args );
}
int main ()
{
wchar_t str[] = L"test string has %d wide characters.\n";
PrintWide ( str, wcslen(str) );
return 0;
} |
可能输出:
test string has 36 wide characters.
🍄 另请参阅
printf |
将格式化的数据打印到标准输出(function ) |
vsnprintf |
将格式化的数据从变量参数列表写入特定大小的缓冲区(function ) |
vfwprintf |
将格式化的数据从变量参数列表写入流(function ) |
vwprintf |
将格式化的数据从变量参数列表打印到标准输出(function ) |
swprintf |
将格式化的数据写入宽字符串(function ) |
wprintf |
将格式化的数据打印到标准输出(function ) |