Namespaces
Variants

wcscpy, wcscpy_s

De es.cppreference.net
< c | string | wide
 
 
 
 
Definida en el encabezado <wchar.h>
wchar_t* wcscpy( wchar_t* dest, const wchar_t* src );
(1) (desde C95)
(hasta C99)
wchar_t* wcscpy( wchar_t* restrict dest, const wchar_t* restrict src );
(desde C99)
errno_t wcscpy_s( wchar_t* restrict dest, rsize_t destsz,
                  const wchar_t* restrict src );
(2) (desde C11)
1) Copia la cadena ancha apuntada por src (incluyendo el carácter ancho nulo de terminación) al arreglo de caracteres anchos apuntado por dest. El comportamiento no está definido si el arreglo dest no es suficientemente grande. El comportamiento no está definido si las cadenas se superponen.
2) Igual que (1), excepto que puede sobrescribir el resto del arreglo destino con valores no especificados y que los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricciones instalada actualmente:
  • src o dest es un puntero nulo
  • destsz es cero o mayor que RSIZE_MAX / sizeof(wchar_t)
  • destsz es menor o igual a wcsnlen_s(src, destsz), en otras palabras, ocurriría truncamiento
  • ocurriría superposición entre las cadenas origen y destino
Como todas las funciones con verificación de límites, wcscpy_s solo 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 entera 1 antes de incluir <wchar.h>.

Parámetros

dest - puntero al arreglo de caracteres anchos al que copiar
src - puntero a la cadena ancha terminada en nulo desde la que copiar
destsz - número máximo de caracteres a escribir, típicamente el tamaño del búfer destino

Valor de retorno

1) devuelve una copia de dest
2) devuelve cero en caso de éxito, devuelve un valor distinto de cero en caso de error. Además, en caso de error, escribe L'\0' en dest[0] (a menos que dest sea un puntero nulo o destsz sea cero o mayor que RMAX_SIZE / sizeof(wchar_t)).

Ejemplo

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    wchar_t* src = L"犬 means dog";
//  src[0] = L'狗' ; // this would be undefined behavior
    wchar_t dst[wcslen(src) + 1]; // +1 for the null terminator
    wcscpy(dst, src);
    dst[0] = L'狗'; // OK

    setlocale(LC_ALL, "en_US.utf8");
    printf("src = %ls\ndst = %ls\n", src, dst);
}

Salida:

src = 犬 means dog
dst = 狗 means dog

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.31.4.2.1 La función wcscpy (p: 438)
  • K.3.9.3.1.1 La función wcscpy_s (p: 663)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.29.4.1.2 La función wcscpy (p: TBD)
  • K.3.9.2.1.1 La función wcscpy_s (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.29.4.1.2 La función wcscpy (p: 430)
  • K.3.9.2.1.1 La función wcscpy_s (p: 639)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.24.4.1.2 La función wcscpy (p: 376)

Véase también

copia una cierta cantidad de caracteres anchos de una cadena a otra
(función)
copia una cierta cantidad de caracteres anchos entre dos arreglos que no se superponen
(función)
copia una cadena a otra
(función)