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。有关更多信息,请参见 平台调用示例。