wmemcpy, wmemcpy_s
From cppreference.net
|
Definido en el encabezado
<wchar.h>
|
||
| (1) | ||
|
wchar_t
*
wmemcpy
(
wchar_t
*
dest,
const
wchar_t
*
src,
size_t
count
)
;
|
(desde C95)
(hasta C99) |
|
|
wchar_t
*
wmemcpy
(
wchar_t
*
restrict
dest,
const
wchar_t
*
restrict
src,
size_t count ) ; |
(desde C99) | |
|
errno_t wmemcpy_s
(
wchar_t
*
restrict
dest, rsize_t destsz,
const wchar_t * restrict src, rsize_t count ) ; |
(2) | (desde C11) |
1)
Copia exactamente
count
caracteres anchos sucesivos del array de caracteres anchos apuntado por
src
al array de caracteres anchos apuntado por
dest
. Si los objetos se superponen, el comportamiento es indefinido. Si
count
es cero, la función no hace nada.
2)
Igual que
(1)
, excepto que los siguientes errores se detectan en tiempo de ejecución y llaman a la función
controladora de restricciones
actualmente instalada:
-
-
srcodestes un puntero nulo -
destszocountes mayor que RSIZE_MAX / sizeof ( wchar_t ) -
countes mayor quedestsz(ocurriría un desbordamiento) - se produciría superposición entre los arrays de origen y destino
-
-
Como con todas las funciones con verificación de límites,
wmemcpy_ssolo está garantizada que esté disponible si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <wchar.h> .
Contenidos |
Parámetros
| dest | - | puntero al array de caracteres anchos donde copiar |
| src | - | puntero al array de caracteres anchos desde donde copiar |
| count | - | número de caracteres anchos a copiar |
| destsz | - | número máximo de caracteres anchos a escribir (el tamaño del búfer de destino) |
Valor de retorno
1)
devuelve una copia de
dest
2)
retorna cero en caso de éxito, retorna distinto de cero en caso de error. Además, en caso de error, llena completamente
dst
hasta pero sin incluir
dst
+
dstsz
con caracteres anchos nulos,
L
'
\0
'
(a menos que
dest
sea nulo o
destsz
sea mayor que
RSIZE_MAX
/
sizeof
(
wchar_t
)
)
Notas
El análogo de esta función para cadenas de bytes es strncpy , no strcpy .
Esta función no es sensible a la configuración regional y no presta atención a los valores de los wchar_t que copia: los nulos así como los caracteres inválidos también se copian.
Ejemplo
Ejecutar este código
#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"); }
Salida posible:
Wide array contains: नमस्ते\0Բարև\0
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.29.4.2.3 La función wmemcpy (p: 431)
-
- K.3.9.2.1.3 La función wmemcpy_s (p: 641)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.24.4.2.3 La función wmemcpy (p: 377)
Véase también
|
(C95)
(C11)
|
copia cierta cantidad de caracteres anchos entre dos arreglos, posiblemente superpuestos
(función) |
|
(C11)
|
copia cierta cantidad de caracteres de una cadena a otra
(función) |
|
Documentación de C++
para
wmemcpy
|
|