wcrtomb
将宽字符转换为字节字符表示形式。 此功能的一种较为安全的版本可用; wcrtomb_s参见。
size_t wcrtomb(
char *mbchar,
wchar_t wchar,
mbstate_t *mbstate
);
template <size_t size>
size_t wcrtomb(
char (&mbchar)[size],
wchar_t wchar,
mbstate_t *mbstate
); // C++ only
参数
[out] mbchar
生成的多字节转换后的字符。[in] wchar
转换的宽字符。[in] mbstate
为 mbstate_t 对象的指针。
返回值
,如果发生错误,则返回要求的字节数表示已转换的多字节字符,否则 a-1。
备注
wcrtomb 函数将宽字符开始,在 mbstate包含的指定转换状态,在 wchar包含的值,为 mbchar表示的地址。 返回值是要求的字节数表示相应的多字节字符,但是,它比 MB_CUR_MAX 字节不会返回。
如果 mbstate 为空,使用包含 mbchar 的转换状态内部 mbstate_t 对象。 如果字符序列 wchar 没有相应的多字节字符表示形式, a-1 返回,并且 errno 设置为 EILSEQ。
wcrtomb 功能与 wctomb, _wctomb_l 不同由其 restartability。 转换状态中的 mbstate 存储的后续调用相同或其他可重新启动的功能。 ,混合使用可重新启动和 nonrestartable 函数时,结果是未定义的。 例如,应用程序将使用 wcsrlen 而不是 wcsnlen,因此,如果以后对 wcsrtombs 使用了而不是 wcstombs。
在 C++ 中,该函数具有调用的模板重载越+新,保证此功能副本。 有关更多信息,请参见 安全模板重载。
异常
wcrtomb 功能是多线程安全性,只要在当前线程的函数不调用 setlocale ,则此函数执行时,所以,当 mbstate 为空时。
示例
// crt_wcrtomb.c
// compile with: /W3
// This program converts a wide character
// to its corresponding multibyte character.
#include <string.h>
#include <stdio.h>
#include <wchar.h>
int main( void )
{
size_t sizeOfCovertion = 0;
mbstate_t mbstate;
char mbStr = 0;
wchar_t* wcStr = L"Q";
// Reset to initial conversion state
memset(&mbstate, 0, sizeof(mbstate));
sizeOfCovertion = wcrtomb(&mbStr, *wcStr, &mbstate); // C4996
// Note: wcrtomb is deprecated; consider using wcrtomb_s instead
if (sizeOfCovertion > 0)
{
printf("The corresponding wide character \"");
wprintf(L"%s\"", wcStr);
printf(" was converted to the \"%c\" ", mbStr);
printf("multibyte character.\n");
}
else
{
printf("No corresponding multibyte character "
"was found.\n");
}
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。
要求
实例 |
必需的头 |
---|---|
wcrtomb |
wchar.h |