Spec-Zone.ru › C

wmemmove, wmemmove_s

Defined in header <wchar.h>
wchar_t* wmemmove( wchar_t* dest, const wchar_t* src, size_t count );
(1) (since C95)
errno_t wmemmove_s( wchar_t *dest, rsize_t destsz,
                    const wchar_t *src, rsize_t count);
(2) (since 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:2023):
    • 7.29.4.2.4 Функция wmemmove (p: TBD)
    • K.3.9.2.1.4 Функция wmemmove_s (p: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.29.4.2.4 Функция wmemmove (p: TBD)
    • K.3.9.2.1.4 Функция wmemmove_s (p: TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.29.4.2.4 Функция wmemmove (p: 432)
    • K.3.9.2.1.4 Функция wmemmove_s (p: 642)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.24.4.2.4 Функция wmemmove (p: 378)

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/wide/wmemmove

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API