wmemcpy, wmemcpy_s
From cppreference.net
|
Определено в заголовочном файле
<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
|
|