%>
将一个多字节字符从一个字符串复制到另一个字符串。 这些版本的 _mbccpy
、_mbccpy_l
具有安全增强功能,如 CRT 中的安全功能中所述。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 Windows 平台应用中不支持的 CRT 函数。
语法
errno_t _mbccpy_s(
unsigned char *dest,
size_t buffSizeInBytes,
int * pCopied,
const unsigned char *src
);
errno_t _mbccpy_s_l(
unsigned char *dest,
size_t buffSizeInBytes,
int * pCopied,
const unsigned char *src,
_locale_t locale
);
template <size_t size>
errno_t _mbccpy_s(
unsigned char (&dest)[size],
int * pCopied,
const unsigned char *src
); // C++ only
template <size_t size>
errno_t _mbccpy_s_l(
unsigned char (&dest)[size],
int * pCopied,
const unsigned char *src,
_locale_t locale
); // C++ only
参数
dest
复制目标。
buffSizeInBytes
目标缓冲区的大小。
pCopied
填充复制的字节数(如果成功则为 1 或 2)。 如果不在乎数量,则传递 NULL
。
src
要复制的多字节字符。
locale
要使用的区域设置。
返回值
如果成功,则为零;如果失败,则为错误代码。 如果 src
或 dest
是 NULL
,或如果要将超过 buffSizeinBytes
个字节复制到 dest
,则将调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则函数将返回 EINVAL
并将 errno
设置为 EINVAL
。
注解
_mbccpy_s
函数将一个多字节字符从 src
复制到 dest
。 如果 src
未按照对 _ismbblead
的隐式调用确定的方式指向多字节字符的前导字节,则会复制 src
指向的单字节。 如果 src
指向前导字节,但是后续字节为 0 并因此而无效,则将 0 复制到 dest
,将 errno
设置为 EILSEQ
,函数返回 EILSEQ
。
_mbccpy_s
未追加 null 终止符;但是,如果 src
指向空字符,则会将该 null 复制到 dest
(作为常规的单字节复制)。
pCopied
中的值使用复制的字节数填充。 如果操作成功,则可能的值为 1 和 2。 如果传入了 NULL
,则会忽略此参数。
src |
复制到 dest |
pCopied |
返回值 |
---|---|---|---|
非前导字节 | 非前导字节 | 1 | 0 |
0 | 0 | 1 | 0 |
前导字节,后跟非零值 | 前导字节,后跟非零值 | 2 | 0 |
前导字节,后跟 0 | 0 | 1 | EILSEQ |
第二行只是第一行的特殊情况。 该表假定 buffSizeInBytes
>= pCopied
。
_mbccpy_s
对依赖于区域设置的任何行为使用当前区域设置。 _mbccpy_s_l
等同于 _mbccpy_s
,只不过 _mbccpy_s_l
使用为所有与区域设置相关的行为传入的区域设置。
在 C++ 中,通过模板重载简化这些函数的使用;重载可以自动推导出缓冲区长度,不再需要指定大小参数。 有关详细信息,请参阅安全模板重载。
默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态。
一般文本例程映射
Tchar.h 例程 | _UNICODE 和 _MBCS 未定义 |
_MBCS 已定义 |
_UNICODE 已定义 |
---|---|---|---|
_tccpy_s |
映射到宏或内联函数。 | _mbccpy_s |
映射到宏或内联函数。 |
要求
例程 | 必需的标头 |
---|---|
_mbccpy_s |
<mbstring.h> |
_mbccpy_s_l |
<mbstring.h> |
有关兼容性的详细信息,请参阅 兼容性。
另请参阅
区域设置
多字节字符序列的解释
.- .