Namespaces
Variants

wcsncat, wcsncat_s

From cppreference.net
< c ‎ | string ‎ | wide
Definido en el encabezado <wchar.h>
(1)
wchar_t * wcsncat ( wchar_t * dest, const wchar_t * src, size_t count ) ;
(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) Añade 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 el 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 es indefinido si el array de destino no es lo suficientemente grande para los contenidos de ambos str y dest y el carácter nulo ancho de terminación.
El comportamiento es indefinido si las cadenas se superponen.
2) Igual que (1) , excepto que esta función puede alterar el resto del array de 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 constraint handler actualmente instalada:
  • src o dest es un puntero nulo
  • destsz o count es cero o mayor que RSIZE_MAX / sizeof ( wchar_t )
  • no hay un carácter ancho nulo en los primeros destsz caracteres anchos de dest
  • ocurriría truncamiento: count o la longitud de src , el que sea menor, excede el espacio disponible entre el terminador nulo de dest y destsz .
  • ocurriría superposición entre las cadenas fuente y destino
Como con todas las funciones con verificación de límites, wcsncat_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__ a la constante entera 1 antes de incluir <wchar.h> .

Contenidos

Parámetros

dest - puntero a la cadena ancha terminada en nulo a la que se va a añadir
src - puntero a la cadena ancha terminada en nulo desde la que se va a copiar
count - número máximo de caracteres anchos a copiar
destsz - 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, 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 de destino es un riesgo de seguridad y, por lo tanto, una violación de las restricciones en tiempo de ejecución para wcsncat_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 como siempre: wcsncat_s ( dst, sizeof dst / sizeof * dst, src, ( sizeof dst / sizeof * dst ) - wcsnlen_s ( dst, sizeof dst / sizeof * dst ) - 1 ) ;

Ejemplo

#include <wchar.h> 
#include <stdio.h>
#include <locale.h>
int main(void) 
{
    wchar_t str[50] = L"Земля, прощай.";
    wcsncat(str, L" ", 1);
    wcsncat(str, L"В добрый путь.", 8); // solo agregar los primeros 8 caracteres anchos
    setlocale(LC_ALL, "en_US.utf8");
    printf("%ls", str);
}

Salida posible:

Земля, прощай. В добрый

Referencias

  • 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)
concatena una cantidad determinada de caracteres de dos cadenas
(función)
(C95) (C11)
copia una cadena ancha a otra
(función)