wmemcpy, wmemcpy_s
Определено в заголовочном файле <wchar.h> | ||
|---|---|---|
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count ); | (1) |
(начиная с 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) при успешном выполнении возвращает ноль, при ошибке — ненулевое значение. Кроме того, при ошибке заполняет весь
dest вплоть до, но не включая dest + destsz нулевыми широкими символами, L'\0' (если только dest не является нулевым указателем или destsz не больше, чем RSIZE_MAX / sizeof(wchar_t))Примечания
Аналогом этой функции для строк байтов является strncpy, а не strcpy.
Эта функция не зависит от локали и не обращает внимания на значения копируемых объектов wchar_t: копируются как нулевые символы, так и недопустимые символы.
Пример
#include <locale.h>
#include <stdio.h>
#include <wchar.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
Ссылки
- Стандарт C23 (ISO/IEC 9899:2024):
- 7.29.4.2.3 Функция wmemcpy (с. TBD)
- K.3.9.2.1.3 Функция wmemcpy_s (с. TBD)
- Стандарт C17 (ISO/IEC 9899:2018):
- 7.29.4.2.3 Функция wmemcpy (с. TBD)
- K.3.9.2.1.3 Функция wmemcpy_s (с. TBD)
- Стандарт 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)
См. также
|
(C95)(C11) | копирует заданное количество широких символов между двумя потенциально перекрывающимися массивами (функция) |
|
(C11) | копирует заданное количество символов из одной строки в другую (функция) |
Документация C++ для wmemcpy |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/string/wide/wmemcpy