wmemcpy, wmemcpy_s
Определено в заголовке <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)
См. также
|
(C95)(C11) | копирует определенное количество широких символов между двумя, возможно перекрывающимися, массивами (функция) |
|
(C11) | копирует определенное количество символов из одной строки в другую (функция) |
Документация C++ для wmemcpy |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/string/wide/wmemcpy