Поделиться через


_mbccpy_s, _mbccpy_s_l

Копирует один многобайтовый символ из строки в другую строку. В этих версиях _mbccpy, _mbccpy_l усовершенствована безопасность, как описано в разделе Функции безопасности в CRT.

Важно!

Этот API невозможно использовать в приложениях, запускаемых в среде выполнения Windows.Дополнительные сведения см. в статье Функции CRT, которые не поддерживаются с ключом /ZW.

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 не добавляет завершающий нуль-символ; однако если src указывает на нуль-символ, то он копируется в dest (это просто обычное однобайтовое копирование).

Значение в pCopied равно количеству копированных байтов. Возможные значения 1 и 2, если операция выполнена успешно. Если передается NULL, то этот параметр не учитывается.

src

скопированный в dest

pCopied

Возвращаемое значение

не-ведущий байт

не-ведущий байт

1

0

0

0

1

0

старший байт, за которым следует не 0

старший байт, за которым следует не 0

2

0

старший байт, за которым следует 0

0

1

EILSEQ

Обратите внимание, что вторая строка - это только особый случай первой. Также обратите внимание, что таблица предполагает, что buffSizeInBytes >= pCopied.

_mbccpy_s использует текущий языковой стандарт для любого поведения, зависимого от языкового стандарта. _mbccpy_s_l совпадает с _mbccpy_s за исключением того, что _mbccpy_s_l используется языковой стандарт, переданный для любого поведения, зависящего от языкового стандарта.

В C++ использование этих функций упрощено шаблонными перегрузками; перегрузки могут определить длину буфера автоматически, устранена необходимость указывать аргумент size. Дополнительные сведения см. в разделе Безопасные перегрузки шаблонов.

Универсальное текстовое сопоставление функций

Подпрограмма Tchar.h

_UNICODE и _MBCS не определены

_MBCS определено

_UNICODE определено

_tccpy_s

Сопоставляется макросу или встроенной функции.

_mbccpy_s

Сопоставляется макросу или встроенной функции.

Требования

Подпрограмма

Обязательный заголовок

_mbccpy_s

<mbstring.h>

_mbccpy_s_l

<mbstring.h>

Дополнительные сведения о совместимости см. в разделе Совместимость.

См. также

Ссылки

Языковой стандарт

Интерпретация последовательностей в многобайтной кодировке

_mbclen, mblen, _mblen_l