C++官网参考链接:https://cplusplus.com/reference/cstdlib/wctomb/
函数
<cstdlib>
wctomb
int wctomb (char* pmb, wchar_t wc);
宽字符wc被转换为其等效多字节,并存储在pmb指向的数组中。函数在调用后返回由pmb指向的等效多字节序列的字节长度。
wctomb有自己的内部移位状态,只有调用这个函数时才会在必要时对其进行更改。用空指针作为pmb调用函数会重置状态(并返回多字节序列是否依赖于状态)。
此函数的行为取决于所选C区域设置(C locale)的LC_CTYPE类别。
形参
pmb
指向足以容纳多字节序列的数组的指针。
当前区域设置中字符的多字节序列的最大长度是MB_CUR_MAX字节。
或者,可以使用空指针调用函数,在这种情况下,函数将其内部移位状态重置为初始值,并返回多字节序列是否使用依赖于状态的编码。
wc
wchar_t类型的宽字符。
返回值
如果作为pmb传递的实参不是空指针,则返回写入pmb的字符的字节大小。如果没有对应字符,则返回-1。
如果作为pmb传递的实参是空指针,则如果多字节字符编码依赖于状态,则函数返回非零值,否则返回零值。
用例
/* wctomb example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* wctomb, wchar_t(C) */
int main() {
const wchar_t str[] = L"wctomb example";
const wchar_t* pt;
char buffer [MB_CUR_MAX];
int i,length;
pt = str;
while (*pt) {
length = wctomb(buffer,*pt);
if (length<1) break;
for (i=0;i<length;++i) printf ("[%c]",buffer[i]);
++pt;
}
return 0;
}
该示例使用选定的区域设置(在本例中,是默认的“C”区域设置)打印宽字符串转换为的多字节字符。
输出:
数据竞争
函数修改由pmb指向的数组。
该函数还访问和修改内部状态对象,这可能导致对该函数的并发调用出现数据竞争(有关可能使用外部状态对象的替代方法,请参阅wcrtomb)。
同时更改区域设置还可能导致数据竞争。
异常(C++)
无抛出保证:此函数不抛出异常。
如果pmb既不是空指针,也不是指向已翻译字符足够长的数组的指针,则会导致未定义的行为。
另请参考
mblen Get length of multibyte character (function)
mbtowc Convert multibyte sequence to wide character (function)
mbstowcs Convert multibyte string to wide-character string (function)
wcstombs Convert wide-character string to multibyte string (function)