wmemcpy, wmemcpy_s
Из ru.cppreference.net
| Определено в заголовке <wchar.h>
|
||
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
|
(1) | (since C95) (until C99) |
wchar_t* wmemcpy(wchar_t* restrict dest, const wchar_t* restrict src,
size_t count );
|
(since C99) | |
errno_t wmemcpy_s( wchar_t* restrict dest, rsize_t destsz,
const wchar_t* restrict src, rsize_t count );
|
(2) | (since 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) возвращает копию
dest2) возвращает ноль в случае успеха, возвращает ненулевое значение в случае ошибки. Также, в случае ошибки, заполняет весь
dest до (не включая) dest + destsz нулевыми широкими символами, L'\0' (если только dest не равен null или 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
| |