Namespaces
Variants

wmemcpy, wmemcpy_s

From cppreference.net
< c ‎ | string ‎ | wide
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:
  • src o dest es un puntero nulo
  • destsz o count es mayor que RSIZE_MAX / sizeof ( wchar_t )
  • count es mayor que destsz (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_s solo 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

#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

copia cierta cantidad de caracteres anchos entre dos arreglos, posiblemente superpuestos
(función)
copia cierta cantidad de caracteres de una cadena a otra
(función)