wcstombs, _wcstombs_l

将宽字符序列分成多字节字符一个对应的序列。 这些功能的更安全版本可用; wcstombs_s, _wcstombs_s_l参见。

size_t wcstombs(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count 
);
size_t _wcstombs_l(
   char *mbstr,
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
);
template <size_t size>
size_t wcstombs(
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count 
); // C++ only
template <size_t size>
size_t _wcstombs_l(
   char (&mbstr)[size],
   const wchar_t *wcstr,
   size_t count,
   _locale_t locale
); // C++ only

参数

  • mbstr
    多字节字符序列的地址。

  • wcstr
    宽字符序列的地址。

  • count
    在多字节输出字符串中存储的最大字节数。

  • locale
    使用的区域设置。

返回值

如果 wcstombs 成功转换多字节字符串,它返回字节数将写入输出多字节字符串,不包括终止的 NULL (如果有)。 如果 mbstr 参数是 NULL, wcstombs 在目标字符串的字节返回需的范围。 如果它不能转换为多字节字符的 wcstombs 遇到宽字符,它将返回 –转换的 1 键入 size_t 并将 errno 到 EILSEQ。

备注

wcstombs 函数在 mbstr 数组转换 wcstr 点转换为宽字符字符串为相应的多字节字符并将结果存储。 count 参数指示即在多字节输出字符串的最大字节数 (范围可以存储 mbstr)。 通常,不知道需要多少字节,将宽字符字符串。 这些宽字符只需要在输出字符串中的一个字节;其他需要两。 如果在多字节输出字符串的两个字节在输入字符串中每个宽字符 (包括宽字符 NULL),则结果确保装载。

如果 wcstombs 遇到宽字符 null 字符 (L' \ 0 ") 或前面,或者 count 发生,则将其强制转换为 8 位 0 并停止。 因此,在转换过程中,,因此,只有当 wcstombs 遇到宽字符 null 字符在 mbstr 的多字节字符字符串 null 结尾。 如果顺序指向由 wcstr 和 mbstr 重叠, wcstombs 行为不确定。

如果 mbstr 参数是 NULL, wcstombs 在目标字符串的字节返回需的范围。

wcstombs 验证其参数。 如果 wcstr 是 NULL,或者,如果 count 比INT_MAX大,此函数调用的参数无效处理程序,如 参数验证 所述。 如果执行允许继续,该功能集 errno 到 EINVAL 并返回 -1。

wcstombs 为所有与区域设置相关的行为使用当前区域设置; _wcstombs_l 与相同,但它使用的区域设置。 有关更多信息,请参见 区域设置

在 C++ 中,这些函数的调用的模板重载越+新,保证这些函数副本。 有关更多信息,请参见 安全模板重载

要求

实例

必需的头

wcstombs

stdlib.h

_wcstombs_l

stdlib.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

此过程说明 wcstombs 功能的行为。

// crt_wcstombs.c
// compile with: /W3
// This example demonstrates the use
// of wcstombs, which converts a string
// of wide characters to a string of 
// multibyte characters.

#include <stdlib.h>
#include <stdio.h>

#define BUFFER_SIZE 100

int main( void )
{
    size_t  count;
    char    *pMBBuffer = (char *)malloc( BUFFER_SIZE );
    wchar_t *pWCBuffer = L"Hello, world.";

    printf("Convert wide-character string:\n" );

    count = wcstombs(pMBBuffer, pWCBuffer, BUFFER_SIZE ); // C4996
    // Note: wcstombs is deprecated; consider using wcstombs_s instead
    printf("   Characters converted: %u\n",
            count );
    printf("    Multibyte character: %s\n\n",
           pMBBuffer );

    free(pMBBuffer);
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

数据转换

区域设置

_mbclen, mblen, _mblen_l

mbstowcs, _mbstowcs_l

mbtowc, _mbtowc_l

wctomb, _wctomb_l

WideCharToMultiByte