Namespaces
Variants

wmemcpy, wmemcpy_s

From cppreference.net
< c ‎ | string ‎ | wide
Определено в заголовочном файле <wchar.h>
(1)
wchar_t * wmemcpy ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(начиная с C95)
(до C99)
wchar_t * wmemcpy ( wchar_t * restrict dest, const wchar_t * restrict src,
size_t count ) ;
(начиная с C99)
errno_t wmemcpy_s ( wchar_t * restrict dest, rsize_t destsz,
const wchar_t * restrict src, rsize_t count ) ;
(2) (начиная с C11)
1) Копирует ровно count последовательных широких символов из массива широких символов, на который указывает src , в массив широких символов, на который указывает dest . Если объекты перекрываются, поведение не определено. Если count равен нулю, функция ничего не делает.
2) То же, что и (1) , за исключением того, что следующие ошибки обнаруживаются во время выполнения и вызывают текущую установленную функцию-обработчик ограничений :
  • src или dest является нулевым указателем
  • destsz или count превышает RSIZE_MAX / sizeof ( wchar_t )
  • count превышает destsz (произошло бы переполнение)
  • возникло бы перекрытие между исходным и целевым массивами
Как и все функции с проверкой границ, wmemcpy_s гарантированно доступна только если реализация определяет __STDC_LIB_EXT1__ и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <wchar.h> .

Содержание

Параметры

dest - указатель на массив широких символов для копирования в
src - указатель на массив широких символов для копирования из
count - количество широких символов для копирования
destsz - максимальное количество широких символов для записи (размер буфера назначения)

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

1) возвращает копию dest
2) возвращает ноль при успехе, возвращает ненулевое значение при ошибке. Также при ошибке заполняет всю область dst до позиции, не включая dst + dstsz нулевыми широкими символами, L ' \0 ' (если только dest не является нулевым указателем или destsz не превышает RSIZE_MAX / sizeof ( wchar_t ) )

Примечания

Аналог этой функции для байтовых строк — strncpy , а не strcpy .

Эта функция не зависит от локали и не обращает внимания на значения объектов wchar_t которые она копирует: нулевые символы, а также недопустимые символы также копируются.

Пример

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main(void)
{
    wchar_t from1[] = L"नमस्ते";
    size_t sz1 = sizeof from1 / sizeof *from1;
    wchar_t from2[] = L"Բարև";
    size_t sz2 = sizeof from2 / sizeof *from2;
    wchar_t to[sz1 + sz2];
    wmemcpy(to, from1, sz1); // copy from1, along with its null terminator
    wmemcpy(to + sz1, from2, sz2); // append from2, along with its null terminator
    setlocale(LC_ALL, "en_US.utf8");
    printf("Wide array contains: ");
    for(size_t n = 0; n < sizeof to / sizeof *to; ++n)
        if(to[n])
            printf("%lc", to[n]);
        else
            printf("\\0");
    printf("\n");
}

Возможный вывод:

Wide array contains: नमस्ते\0Բարև\0

Ссылки

  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.29.4.2.3 Функция wmemcpy (стр. 431)
  • K.3.9.2.1.3 Функция wmemcpy_s (стр. 641)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.24.4.2.3 Функция wmemcpy (стр. 377)

Смотрите также

копирует определённое количество широких символов между двумя, возможно перекрывающимися, массивами
(функция)
копирует определённое количество символов из одной строки в другую
(функция)