C++ 中的wcsrtombs() 函数将宽字符序列转换为窄多字节字符序列。
wcsrtombs() 函数在<cwchar> 头文件中定义。
wcsrtombs()原型
size_t wcsrtombs( char* dest, const wchar_t** src, size_t len, mbstate_t* ps );
wcsrtombs()函数将*src
表示的宽字符串转换为对应的多字节字符串,如果dest
不为空,则存储在dest
指向的字符数组中。最多将 len
字符写入 dest
。
转换过程类似于重复调用wcrtomb()。如果出现以下情况,转换将停止:
- 转换并存储了一个宽空字符。在这种情况下,
src
设置为空,ps
表示初始移位状态。 - 遇到无效的宽字符。在这种情况下,
src
设置为指向第一个未转换的宽字符的开头。 len
字节已存储在dest
中。在这种情况下,src
设置为指向第一个未转换的宽字符的开头。
参数:
- >dest:指向存储转换后的多字节字符的字符数组的指针。
src
:指向要转换的第一个宽字符的指针。len
:dest 数组中可用的最大字节数。ps
:指向转换状态对象的指针。
返回:
- 成功时,wcsrtombs() 函数返回写入 dest 的多字节字符数,不包括终止宽空字符,但包括移位序列。
如果 dest 是一个空指针,它返回将被写入的宽字符数,不包括终止空字符。 - 转换错误时,返回 -1 并将 errno 设置为EILSEQ.
示例:wcsrtombs() 函数如何工作?
#include <cwchar>
#include <clocale>
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US.utf8");
const wchar_t* wstr = L"\u0763\u0757\u077f\u075f";
char str[20];
mbstate_t ps = mbstate_t();
int len = 10;
int retVal;
retVal = wcsrtombs(str, &wstr, len, &ps);
cout << "Number of multibyte characters written (excluding \"\\0\") = " << retVal << endl;
cout << "Multibyte character = " << str << endl;
return 0;
}
运行程序时,输出将是:
Number of multibyte characters written (excluding "\0") = 8 Multibyte character = ݣݗݿݟ
相关用法
- C++ wcsrtombs()用法及代码示例
- C++ wcsrchr()用法及代码示例
- C++ wcstold()用法及代码示例
- C++ wcsftime()用法及代码示例
- C++ wcstod()用法及代码示例
- C++ wcscspn()用法及代码示例
- C++ wcsncmp()用法及代码示例
- C++ wcstok()用法及代码示例
- C++ wcsstr()用法及代码示例
- C++ wcsncpy()用法及代码示例
- C++ wcslen()用法及代码示例
- C++ wcsspn()用法及代码示例
- C++ wcschr()用法及代码示例
- C++ wcstof()用法及代码示例
- C++ wcstol()用法及代码示例
- C++ wcspbrk()用法及代码示例
- C++ wcscat()用法及代码示例
- C++ wcscoll()用法及代码示例
- C++ wcsncat()用法及代码示例
- C++ wcscpy()用法及代码示例
注:本文由纯净天空筛选整理自 C++ wcsrtombs()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。