strcat y strncat en C: ejercicio resuelto
strcat y strncat en C: ejercicio resuelto
Si buscas strcat y strncat en C ejercicio resuelto, aquí tienes los patrones esenciales: concatenar dos cadenas con strcat, concatenar con límite de seguridad usando strncat y construir cadenas paso a paso sin desbordamiento de buffer.
strncat(dst, src, n) añade como máximo n caracteres de src al final de dst y siempre termina la cadena con \0. El parámetro n es el número de caracteres a copiar de la fuente, no el tamaño total del destino.
Enunciado
- Construye la cadena
"Hola, mundo!"concatenando partes constrcat. - Repite el ejercicio con
strncatlimitando el número de caracteres añadidos. - Muestra cómo calcular correctamente el espacio restante antes de
strncat.
Solución en C
Resultado esperado
Errores frecuentes
- Pasar el tamaño total del buffer como
nenstrncat: el parámetrones el número de caracteres a copiar de la fuente, no el espacio disponible. Para calcular el espacio real hay que restarstrlen(dst)y el\0. - No reservar espacio suficiente en
dstantes destrcat: sidstno tiene espacio, se produce un desbordamiento de buffer. - Confundir
strncatconstrncpy:strncatsiempre agrega\0;strncpyno lo hace sin < strlen(src). - Encadenar muchos
strcaten lugar de usarsnprintf:snprintfes más eficiente y seguro para construir cadenas compuestas.
Aplicación práctica
strncat se usa para construir cadenas de forma incremental cuando se trabaja con buffers de tamaño fijo: construir rutas de sistema de ficheros, mensajes de protocolo o fragmentos de HTML. En código nuevo se prefiere snprintf para toda la cadena de una vez.
Siguiente ejercicio recomendado
- sprintf y snprintf en C: ejercicio resuelto
- strcpy y strncpy en C: ejercicio resuelto
- strtok en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Cuál es la diferencia exacta entre strcat y strncat?
strcat(dst, src) copia todos los caracteres de src hasta el \0 inclusive al final de dst, sin límite. strncat(dst, src, n) copia como máximo n caracteres de src y siempre añade un \0 al final. La diferencia es de seguridad: strncat permite controlar cuánto se añade.
¿Por qué el parámetro n de strncat no es el tamaño del buffer destino?
Por diseño histórico de C. n indica cuántos caracteres se toman de la fuente. Para calcular el espacio realmente disponible en dst hay que calcular sizeof(dst) - strlen(dst) - 1 y pasar ese valor como n.
¿Cuándo es mejor usar snprintf en lugar de strncat?
Casi siempre. snprintf(buf, sizeof(buf), "%s%s", parte1, parte2) es más claro, más seguro y más eficiente que múltiples llamadas a strncat. Se prefiere strncat solo cuando se añade un fragmento a una cadena existente y el overhead de snprintf no es aceptable.