Ejercicio 07 — Calcular la longitud de una cadena SIN usar strlen, recorriendo hasta…
Dificultad: rojo · Módulo 05 (Arrays y cadenas)
Enunciado
Calcular la longitud de una cadena SIN usar strlen, recorriendo hasta encontrar el caracter ‘\0’.
Diagrama de flujo

Cómo se resuelve
La función strlen de <string.h> mide la longitud de una cadena, pero aquí la calculamos a mano para entender qué hace por dentro: una cadena en C es un array de char que termina en '\0', y su longitud es simplemente cuántos caracteres hay antes de ese terminador.
- Leemos con
fgets, que además del texto guarda el salto de línea'\n'que pulsas con Enter. Por eso primero lo limpiamos: recorremos la cadena y, al encontrar'\n', lo sustituimos por'\0'y salimos. Así el\ndeja de contar como carácter útil. - El núcleo del ejercicio es este bucle:
int longitud = 0;
while (s[longitud] != '\0') {
longitud++;
}Avanzamos un índice mientras no lleguemos al terminador. Cuando s[longitud] es '\0', paramos, y en ese momento longitud vale exactamente el número de caracteres reales. Eso es todo lo que hace strlen.
- Al final imprimimos ambos valores (el manual y el de
strlen, con%zu) para comprobar que coinciden.
Trampa habitual: si la cadena no tuviera '\0' (por ejemplo si rellenas un char[] a mano y olvidas ponerlo), el while no sabría dónde parar y seguiría leyendo memoria ajena hasta encontrar por casualidad un byte cero. El terminador nulo es lo que hace que una cadena en C tenga final.
Para practicar — cópialo en Dev-C++
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 07 — PRACTICA (rellena los TODO)
* Enunciado: Calcular la longitud de una cadena SIN usar strlen,
* recorriendo hasta encontrar el caracter '\0'.
* Dificultad: rojo
* Compilar: gcc -std=c11 -Wall ej07_practica.c -o ej07 && ./ej07
*/
#include <stdio.h>
#include <string.h> // solo para la verificacion final con strlen
int main(void) {
char s[200];
// TODO 1: Lee una cadena con fgets.
// TODO 2 (opcional pero recomendado): Elimina el '\n' que fgets
// incluye al final. Recorre la cadena y si encuentras '\n',
// sustituye por '\0' y sal del bucle.
// TODO 3: Declara 'longitud = 0'. Usa un bucle while cuya condicion
// sea s[longitud] != '\0'. Dentro, incrementa longitud.
// Al salir, longitud tiene el numero de chars utiles.
// TODO 4: Imprime la longitud calculada.
// TODO 5: Verifica con strlen(s) que el resultado coincide.
// printf("strlen dice: %zu\n", strlen(s));
return 0;
}Solución — cópiala y ejecútala
/*
* Curso de C — Modulo 05: Arrays y cadenas
* Ejercicio 07 — MODELO (resuelto)
* Enunciado: Calcular la longitud de una cadena SIN usar strlen,
* recorriendo hasta encontrar el caracter '\0'.
* Dificultad: rojo
* Compilar: gcc -std=c11 -Wall ej07_modelo.c -o ej07 && ./ej07
*/
#include <stdio.h>
#include <string.h> // solo para verificar con strlen al final
int main(void) {
char s[200];
printf("Introduce una cadena: ");
fgets(s, sizeof(s), stdin);
// Eliminar el '\n' que fgets incluye al final (si cabe en el buffer)
// Recorremos hasta '\n' o '\0' y sustituimos '\n' por '\0'
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] == '\n') {
s[i] = '\0';
break;
}
}
// Contar longitud manualmente: avanzar un indice hasta encontrar '\0'
int longitud = 0;
while (s[longitud] != '\0') {
longitud++;
}
// Al salir del while, s[longitud] == '\0', asi que longitud
// contiene exactamente el numero de caracteres utiles.
printf("Longitud (manual): %d\n", longitud);
// Verificacion con strlen (debe coincidir)
printf("Longitud (strlen): %zu\n", strlen(s));
return 0;
}Cómo usarlo
Dev-C++ (Windows): Archivo → Nuevo → Código fuente, pega el código y pulsa F11 (compilar y ejecutar). Si ves los acentos raros en la consola, escribe chcp 65001 y vuelve a ejecutar.