std:: wcstombs
|
定义于头文件
<cstdlib>
|
||
|
std::
size_t
wcstombs
(
char
*
dst,
const
wchar_t
*
src,
std::
size_t
len
)
;
|
||
将指向数组首元素的宽字符序列 src 转换为其初始移位状态下的窄多字节表示形式。转换后的字符将存储到由 dst 指向的 char 数组的连续元素中。目标数组最多写入 len 个字节。
每个字符的转换如同调用 std::wctomb 一般,但 wctomb 的转换状态不受影响。遇到以下情况时转换将停止:
- 空字符已被转换并存储。
- 发现一个 wchar_t 与当前 C 语言区域中的有效字符不匹配。
- 下一个待存储的多字节字符将超出 len 的限制。
目录 |
注释
在大多数实现中,此函数在处理字符串时会更新类型为 std::mbstate_t 的全局静态对象,因此无法被两个线程同时调用,这种情况下应使用 std:: wcsrtombs 。
POSIX规定了一个通用扩展:如果 dst 是空指针,本函数将返回转换后写入 dst 所需的字节数。 std:: wcsrtombs 也具有类似的标准行为。
参数
| dst | - | 指向用于存储多字节字符的窄字符数组的指针 |
| src | - | 指向待转换的空终止宽字符串首元素的指针 |
| len | - | dst 所指数组中可用的字节数 |
返回值
成功时,返回写入到由 dst 指向首元素的字符数组的字节数(包括任何移位序列,但不包括终止符 ' \0 ' )。
在转换错误时(如果遇到无效的宽字符),返回 static_cast < std:: size_t > ( - 1 ) 。
示例
#include <clocale> #include <cstdlib> #include <iostream> int main() { std::setlocale(LC_ALL, "en_US.utf8"); // UTF-8 窄字符多字节编码 const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // 或 L"zß水𝄋" char mbstr[11]; std::wcstombs(mbstr, wstr, 11); std::cout << "multibyte string: " << mbstr << '\n'; }
输出:
multibyte string: zß水𝄋
参见
|
根据给定状态将宽字符串转换为窄多字节字符串
(函数) |
|
|
将窄多字节字符串转换为宽字符串
(函数) |
|
|
[virtual]
|
将字符串从
InternT
转换为
ExternT
,例如写入文件时
(
std::codecvt<InternT,ExternT,StateT>
的虚受保护成员函数)
|
|
C 文档
for
wcstombs
|
|