strlen, strcpy, strcat
Funciones esenciales para strings
strlen, strcpy, strcat es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.
Cadenas en C
En C, una cadena es simplemente un array de char que termina con un carácter especial llamado terminador nulo, '\0'.
Las funciones de <string.h> dependen de este terminador para saber dónde termina una cadena. Sin él, leen más allá del final del array.
#include <stdio.h>
int main(void) {
char name[] = "Alice";
printf("%s\n", name);
printf("Bytes used: %lu\n", sizeof(name));
return 0;
}Incluir string.h
Para usar funciones de cadenas, debe incluir el archivo de cabecera:
#include <string.h>
Esto le proporciona strlen, strcpy, strcat, strcmp y muchas funciones más.
#include <stdio.h>
#include <string.h>
int main(void) {
char greeting[] = "Hello";
printf("Length is %lu\n", strlen(greeting));
return 0;
}strlen: contar caracteres
strlen devuelve el número de caracteres anteriores al terminador nulo. No cuenta el propio '\0'.
Por tanto, strlen("cat") devuelve 3, aunque el array ocupa 4 bytes.
#include <stdio.h>
#include <string.h>
int main(void) {
char word[] = "cat";
printf("strlen = %lu\n", strlen(word));
printf("sizeof = %lu\n", sizeof(word));
return 0;
}strlen es O(n)
Como las cadenas de C no almacenan su longitud, strlen debe recorrer todos los caracteres hasta encontrar '\0'.
Por eso es una operación O(n). Evite llamarla repetidamente en la condición de un bucle cuando trabaje con cadenas grandes.
#include <stdio.h>
#include <string.h>
int main(void) {
char msg[] = "programming";
size_t len = strlen(msg);
for (size_t i = 0; i < len; i++) {
printf("%c", msg[i]);
}
printf("\n");
return 0;
}strcpy: copiar cadenas
No puede copiar cadenas con =. Use strcpy(dest, src), que copia src en dest, incluido el terminador nulo.
El destino debe ser lo bastante grande para contener el origen y el terminador.
#include <stdio.h>
#include <string.h>
int main(void) {
char src[] = "Hello";
char dest[20];
strcpy(dest, src);
printf("%s\n", dest);
return 0;
}peligro de desbordamiento de búfer con strcpy
Si dest es demasiado pequeño, strcpy escribe más allá del búfer y corrompe la memoria. Este es un fallo de seguridad clásico.
Prefiera strncpy(dest, src, n), que copia como máximo n bytes. Nota: strncpy puede no añadir un terminador nulo si src es demasiado largo.
#include <stdio.h>
#include <string.h>
int main(void) {
char src[] = "LongString";
char dest[5];
strncpy(dest, src, 4);
dest[4] = '\0';
printf("%s\n", dest);
return 0;
}strcat: concatenación de cadenas
strcat(dest, src) añade src al final de dest. Comienza a escribir en el terminador nulo de dest y añade uno nuevo al final.
dest ya debe ser una cadena válida con suficiente espacio libre.
#include <stdio.h>
#include <string.h>
int main(void) {
char buffer[20] = "Hello, ";
strcat(buffer, "World");
printf("%s\n", buffer);
return 0;
}Construcción de cadenas paso a paso
Puede encadenar strcpy y strcat para construir una cadena por partes.
Comience siempre con un búfer inicializado para que el primer strcat encuentre un terminador válido.
#include <stdio.h>
#include <string.h>
int main(void) {
char full[50];
strcpy(full, "Mr. ");
strcat(full, "John ");
strcat(full, "Smith");
printf("%s\n", full);
return 0;
}Concatenación más segura con strncat
strncat(dest, src, n) añade como máximo n caracteres de src y después siempre agrega un terminador nulo.
Esto ayuda a evitar desbordamientos cuando se desconoce la longitud del origen.
#include <stdio.h>
#include <string.h>
int main(void) {
char dest[16] = "Data: ";
char src[] = "1234567890";
strncat(dest, src, 5);
printf("%s\n", dest);
return 0;
}Valores de retorno
Tanto strcpy como strcat devuelven un puntero a dest. Esto permite anidar llamadas, aunque puede dificultar la legibilidad.
strlen devuelve un size_t, que es un tipo sin signo. Tenga cuidado al compararlo con enteros con signo.
#include <stdio.h>
#include <string.h>
int main(void) {
char a[20] = "foo";
char b[] = "bar";
printf("%s\n", strcat(a, b));
return 0;
}Error frecuente al reservar memoria
Un error frecuente consiste en olvidar el +1 del terminador nulo al calcular el tamaño de un búfer.
Para una cadena de longitud n necesita n + 1 bytes. La longitud combinada de dos cadenas concatenadas es strlen(a) + strlen(b) + 1.
#include <stdio.h>
#include <string.h>
int main(void) {
char a[] = "abc";
char b[] = "de";
size_t needed = strlen(a) + strlen(b) + 1;
printf("Need %lu bytes\n", needed);
return 0;
}Comprobación rápida
Compruebe cuánto entiende sobre las longitudes de las cadenas.
Repaso
Ha aprendido las funciones principales de string.h:
- strlen cuenta los caracteres anteriores a
'\0'(O(n)). - strcpy copia una cadena; el destino debe tener espacio suficiente.
- strcat añade contenido a una cadena existente.
- Reserve siempre espacio para el terminador nulo y prefiera las variantes
strn*por seguridad.
Preguntas frecuentes
¿La lección «strlen, strcpy, strcat» es gratis?
Sí — el texto completo de «strlen, strcpy, strcat» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.
¿Qué aprenderé en «strlen, strcpy, strcat»?
Funciones esenciales para strings Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C Academy?
No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «strlen, strcpy, strcat»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C Academy?
Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- strlen, strcpy, strcat
- strcmp y comparación
- strtok y tokenización
- memcpy y memset