std::wprintf, std::fwprintf, std::swprintf
在标头
<cwchar>
定义
|
||
int wprintf( const wchar_t* format, ... );
|
(1) | |
int
fwprintf( std::FILE* stream, const wchar_t* format, ... );
|
(2) | |
int
swprintf( wchar_t* buffer, std::size_t size,
const wchar_t* format, ... );
|
(3) | |
从给定位置加载数据,转换它们到宽字符串等价版本,并写入结果到各种池。
stream
。buffer
。至多写入 size-1 个宽字符,后随空宽字符。参数
stream | - | 要写入的输出文件流 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer | - | 指向要写入的宽字符串的指针 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
size | - | 至多可写入 size - 1 个字符,再加上空终止符
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | - | 指向指定转译方式的空终止宽字符串的指针。
格式字符串由普通宽字符(除了
下列格式指示符可用:
浮点转换函数转换无穷大到 非数转换成 转换 尽管 定宽整数类型( int8_t 等)的正确转换指示定义于头文件 <cinttypes>
(尽管 PRIdMAX 、 PRIuMAX
等就是 内存写入转换指示符 %n 是安全漏洞的常见目标,这里格式字符串依赖用户输入,而有边界检查的
在每个转换指示符的行动后有一个序列点;这允许于同一变量多次存入 %n 的结果,并在同一此调用中打印出先前以 %n 存储的值。 若转换指示非法,则行为未定义。
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
... | - | 指定要打印的数据的参数。若任何参数在默认转换后不拥有对应转换指示符所期待的类型,或若参数少于
format 所要求的数量,则行为未定义。若有多于 format 所要求的参数,则求值并忽略额外参数
|
返回值
size
(包含 size
为零时)则为负值。注解
窄字符串提供 std::snprintf
,它使得程序能够确定要求的输出缓冲区大小。不过宽字符串无等价版本,而且为确定缓冲区大小,程序需要调用 std::swprintf
,检查结果值,再重新分配更大的缓冲区,反复尝试直至成功。
示例
#include <iostream> #include <locale> #include <clocale> #include <cwchar> int main() { char narrow_str[] = "z\u00df\u6c34\U0001f34c"; // 或 "zß水🍌" // 或 "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t warr[29]; // 期待的字符串为 28 字符加 1 个空终止符 std::setlocale(LC_ALL, "en_US.utf8"); std::swprintf(warr, sizeof warr/sizeof *warr, L"Converted from UTF-8: '%s'", narrow_str); std::wcout.imbue(std::locale("en_US.utf8")); std::wcout << warr << '\n'; }
输出:
Converted from UTF-8: 'zß水🍌'
参阅
(C++11)
|
打印有格式输出到 stdout、文件流或缓冲区 (函数) |
使用可变实参列表打印 有格式宽字符输出到 stdout、文件流或缓冲区 (函数) |
|
写宽字符串到文件流 (函数) |