Namespaces
Variants

wmemmove, wmemmove_s

From cppreference.net
< c ‎ | string ‎ | wide
Определено в заголовке <wchar.h>
wchar_t * wmemmove ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(1) (начиная с C95)
errno_t wmemmove_s ( wchar_t * dest, rsize_t destsz,
const wchar_t * src, rsize_t count ) ;
(2) (начиная с C11)
1) Копирует ровно count последовательных широких символов из массива широких символов, на который указывает src , в массив широких символов, на который указывает dest . Если count равен нулю, функция ничего не делает. Массивы могут перекрываться: копирование происходит так, как если бы широкие символы были скопированы во временный массив широких символов, а затем скопированы из временного массива в dest .
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 - указатель на массив широких символов, из которого производится копирование
destsz - максимальное количество широких символов для записи (размер буфера назначения)
count - количество широких символов для копирования

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

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

Примечания

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

Пример

#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
    setlocale(LC_ALL, "en_US.utf8");
    wchar_t str[] = L"αβγδεζηθικλμνξοπρστυφχψω";
    printf("%ls\n", str);
    wmemmove(str + 4, str + 3, 3); // copy from [δεζ] to [εζη]
    printf("%ls\n", str);
}

Вывод:

αβγδεζηθικλμνξοπρστυφχψω
αβγδδεζθικλμνξοπρστυφχψω

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
  • 7.29.4.2.4 Функция wmemmove (стр.: TBD)
  • K.3.9.2.1.4 Функция wmemmove_s (стр.: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
  • 7.29.4.2.4 Функция wmemmove (стр.: TBD)
  • K.3.9.2.1.4 Функция wmemmove_s (стр.: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
  • 7.29.4.2.4 Функция wmemmove (стр: 432)
  • K.3.9.2.1.4 Функция wmemmove_s (стр: 642)
  • Стандарт C99 (ISO/IEC 9899:1999):
  • 7.24.4.2.4 Функция wmemmove (стр: 378)

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

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