wmemcpy, wmemcpy_s
De es.cppreference.net
| Definido en el encabezado <wchar.h>
|
||
wchar_t* wmemcpy( wchar_t* dest, const wchar_t* src, size_t count );
|
(1) | (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 amplios sucesivos del arreglo de caracteres amplios apuntado por src al arreglo de caracteres amplios apuntado por dest. Si los objetos se superponen, el comportamiento no está definido. 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 manejador de restricción instalada actualmente:
srcodestes un puntero nulodestszocountes mayor queRSIZE_MAX / sizeof(wchar_t)countes mayor quedestsz(se produciría desbordamiento)- se produciría superposición entre los arreglos de origen y destino
- Como todas las funciones con verificación de límites,
wmemcpy_ssolo se garantiza 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 entera1antes de incluir <wchar.h>.
Parámetros
| dest | - | puntero al arreglo de caracteres amplios donde copiar |
| src | - | puntero al arreglo de caracteres amplios desde donde copiar |
| count | - | número de caracteres amplios a copiar |
| destsz | - | número máximo de caracteres amplios a escribir (el tamaño del búfer de destino) |
Valor de retorno
1) devuelve una copia de
dest2) devuelve cero en caso de éxito, devuelve distinto de cero en caso de error. Además, en caso de error, llena todo
dest hasta antes de dest + destsz con caracteres amplios 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 objetos wchar_t que copia: tanto los nulos como los caracteres inválidos también se copian.
Ejemplo
Ejecutar este código
#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");
}
Posible salida:
Wide array contains: नमस्ते\0Բարև\0
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.29.4.2.3 La función wmemcpy (p: TBD)
- K.3.9.2.1.3 La función wmemcpy_s (p: TBD)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.29.4.2.3 La función wmemcpy (p: TBD)
- K.3.9.2.1.3 La función wmemcpy_s (p: TBD)
- 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 una cierta cantidad de caracteres amplios entre dos arreglos, posiblemente superpuestos (función) |
(C11) |
copia una cierta cantidad de caracteres de una cadena a otra (función) |
Documentación de C++ para wmemcpy
| |