wcsncat, wcsncat_s
De es.cppreference.net
| Definido en el encabezado <wchar.h>
|
||
wchar_t* wcsncat( wchar_t* dest, const wchar_t* src, size_t count );
|
(1) | (desde C95) (hasta C99) |
wchar_t* wcsncat( wchar_t* restrict dest,
const wchar_t* restrict src, size_t count );
|
(desde C99) | |
errno_t wcsncat_s( wchar_t* restrict dest, rsize_t destsz,
const wchar_t* restrict src, rsize_t count );
|
(2) | (desde C11) |
1) Agrega como máximo
count caracteres anchos de la cadena ancha apuntada por src, deteniéndose si se copia el terminador nulo, al final de la cadena de caracteres apuntada por dest. El carácter ancho src[0] reemplaza al terminador nulo al final de dest. El terminador nulo siempre se añade al final (por lo que el número máximo de caracteres anchos que la función puede escribir es count + 1). El comportamiento no está definido si el arreglo destino no es lo suficientemente grande para el contenido tanto de
src como de dest y el carácter ancho nulo de terminación. El comportamiento no está definido si las cadenas se superponen.
2) Igual que (1), excepto que esta función puede sobrescribir el resto del arreglo destino (desde el último carácter ancho escrito hasta
destsz) y que los siguientes errores se detectan en tiempo de ejecución y llaman a la función manejador de restricciones actualmente instalada:
srcodestes un puntero nulodestszocountes cero o mayor queRSIZE_MAX / sizeof(wchar_t)- no hay un carácter ancho nulo en los primeros
destszcaracteres anchos dedest - se produciría truncamiento:
counto la longitud desrc, el que sea menor, excede el espacio disponible entre el terminador nulo dedestydestsz. - se produciría superposición entre las cadenas fuente y destino
Como todas las funciones con verificación de límites,
wcsncat_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 a la cadena ancha terminada en nulo a la que agregar |
| src | - | puntero a la cadena ancha terminada en nulo desde la que copiar |
| count | - | número máximo de caracteres anchos a copiar |
| destsz | - | el tamaño del búfer destino |
Valor de retorno
1) devuelve una copia de
dest2) devuelve cero en éxito, devuelve distinto de cero en 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 RSIZE_MAX / sizeof(wchar_t)).Notas
Aunque el truncamiento para ajustarse al búfer destino es un riesgo de seguridad y por lo tanto una violación de restricción en tiempo de ejecución para wcsncat_s, es posible obtener el comportamiento de truncamiento especificando count igual al tamaño del arreglo destino menos uno: copiará los primeros count caracteres anchos y agregará el terminador nulo como siempre:
size_t count = sizeof dst / sizeof *dst;
wcsncat_s(dst, count, src, count - wcsnlen_s(dst, count) - 1);
Ejemplo
Ejecutar este código
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main(void)
{
wchar_t str[50] = L"Земля, прощай.";
wcsncat(str, L" ", 1);
wcsncat(str, L"В добрый путь.", 8); // only append the first 8 wide chars
setlocale(LC_ALL, "en_US.utf8");
printf("%ls", str);
}
Posible salida:
Земля, прощай. В добрый
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
- 7.31.4.3.2 La función wcsncat (p: 439)
- K.3.9.3.2.2 La función wcsncat_s (p: 666)
- Estándar C17 (ISO/IEC 9899:2018):
- 7.29.4.3.2 La función wcsncat (p: 315)
- K.3.9.2.2.2 La función wcsncat_s (p: 466-467)
- Estándar C11 (ISO/IEC 9899:2011):
- 7.29.4.3.2 La función wcsncat (p: 432-433)
- K.3.9.2.2.2 La función wcsncat_s (p: 643-644)
- Estándar C99 (ISO/IEC 9899:1999):
- 7.24.4.3.2 La función wcsncat (p: 378-379)
Véase también
(C95)(C11) |
agrega una copia de una cadena ancha a otra (función) |
(C11) |
concatena una cierta cantidad de caracteres de dos cadenas (función) |
(C95)(C11) |
copia una cadena ancha a otra (función) |
Documentación de C++ para wcsncat
| |