wcsncpy, wcsncpy_s
|
Definido en el encabezado
<wchar.h>
|
||
| (1) | ||
|
wchar_t
*
wcsncpy
(
wchar_t
*
dest,
const
wchar_t
*
src,
size_t
count
)
;
|
(desde C95)
(hasta C99) |
|
|
wchar_t
*
wcsncpy
(
wchar_t
*
restrict
dest,
const
wchar_t
*
restrict
src,
size_t
count
)
;
|
(desde C99) | |
|
errno_t wcsncpy_s
(
wchar_t
*
restrict
dest, rsize_t destsz,
const wchar_t * restrict src, rsize_t count ) ; |
(2) | (desde C11) |
count
caracteres de la cadena ancha apuntada por
src
(incluyendo el carácter nulo terminador) al arreglo de caracteres anchos apuntado por
dest
.
count
se alcanza antes de que toda la cadena
src
sea copiada, el array de caracteres anchos resultante no está terminado en nulo.
src
,
count
no se alcanza, se escriben caracteres anchos nulos adicionales en
dest
hasta que se hayan escrito un total de
count
caracteres.
count
, se detiene después de escribir el carácter nulo terminador (si no había un nulo en la fuente, escribe uno en
dest
[
count
]
y luego se detiene). Además, los siguientes errores se detectan en tiempo de ejecución y llaman a la función
constraint handler
actualmente instalada:
-
-
srcodestes un puntero nulo -
destszocountes cero o mayor que RSIZE_MAX / sizeof ( wchar_t ) -
countes mayor o igual adestsz, perodestszes menor o igual a wcsnlen_s ( src, count ) , en otras palabras, ocurriría truncamiento - ocurriría superposición entre las cadenas fuente y destino
-
-
Como con todas las funciones con verificación de límites,
wcsncpy_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 al que copiar |
| src | - | puntero a la cadena ancha desde la que copiar |
| count | - | número máximo de caracteres anchos a copiar |
| destsz | - | tamaño del búfer de destino |
Valor de retorno
dest
dest
sea un puntero nulo o
destsz
sea cero o mayor que
RSIZE_MAX
/
sizeof
(
wchar_t
)
) y puede sobrescribir el resto del array de destino con valores no especificados.
Notas
En un uso típico,
count
es el número de elementos en el array de destino.
Aunque el truncamiento para ajustarse al búfer de destino es un riesgo de seguridad y, por lo tanto, una violación de las restricciones en tiempo de ejecución para
wcsncpy_s
, es posible obtener el comportamiento de truncamiento especificando
count
igual al tamaño del array de destino menos uno: copiará los primeros
count
caracteres anchos y añadirá el terminador nulo ancho como siempre:
wcsncpy_s
(
dst,
sizeof
dst
/
sizeof
*
dst, src,
(
sizeof
dst
/
sizeof
*
dst
)
-
1
)
;
Ejemplo
#include <stdio.h> #include <wchar.h> #include <locale.h> int main(void) { const wchar_t src[] = L"わゐ"; wchar_t dest[6] = {L'あ', L'い', L'う', L'え', L'お'}; wcsncpy(dest, src, 4); // this will copy わゐ and repeat L'\0' two times puts("The contents of dest are: "); setlocale(LC_ALL, "en_US.utf8"); const long dest_size = sizeof dest / sizeof *dest; for(wchar_t* p = dest; p-dest != dest_size; ++p) { *p ? printf("%lc ", *p) : printf("\\0 "); } }
Salida posible:
The contents of dest are: わ ゐ \0 \0 お \0
Referencias
- Estándar C17 (ISO/IEC 9899:2018):
-
- 7.29.4.2.2 La función wcsncpy (p: 314)
-
- K.3.9.2.1.2 La función wcsncpy_s (p: 464)
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.29.4.2.2 La función wcsncpy (p: 431)
-
- K.3.9.2.1.2 La función wcsncpy_s (p: 640-641)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.24.4.2.2 La función wcsncpy (p: 377)
Véase también
|
(C95)
(C11)
|
copia una cadena ancha a otra
(función) |
|
(C95)
(C11)
|
copia cierta cantidad de caracteres anchos entre dos arreglos no superpuestos
(función) |
|
(C11)
|
copia cierta cantidad de caracteres de una cadena a otra
(función) |
|
Documentación de C++
para
wcsncpy
|
|