strlen() vs. sizeof() en C: Entendiendo sus diferencias y uso correcto
¿Qué es strlen()?
En C, strlen() devuelve el número de caracteres en una cadena terminada en nulo, excluyendo el terminador '\0'. Cuenta caracteres alfabéticos, dígitos, símbolos y espacios.
Este artículo explica el papel de strlen(), sizeof() y por qué se comportan de manera diferente.
- Definición de
strlen() - Definición de
sizeof() - Ejemplos de sintaxis
- Diferencias clave
¿Qué es sizeof()?
El operador sizeof produce el tamaño, en bytes, de su operando. Se evalúa en tiempo de compilación para tipos estáticos y en tiempo de ejecución para arrays de longitud variable. Se aplica a todos los tipos de datos de C, incluyendo primitivos, punteros, structs y uniones. El resultado es de tipo size_t, un tipo entero sin signo garantizado para ser lo suficientemente grande como para contener el tamaño del objeto más grande.
Dado que el tamaño de tipos como int o double puede variar entre sistemas de 32 y 64 bits, sizeof asegura la portabilidad.
Diferencias clave
strlen()mide el número de caracteres en una cadena;sizeof()mide la memoria ocupada por una variable o tipo.- Solo
strlen()considera el terminador nulo'\0'de la cadena;sizeof()ignora el contenido. - El tipo de retorno de
strlen()essize_t(comúnmente un entero sin signo de 64 bits en sistemas modernos);sizeof()también devuelvesize_t. strlen()es una función de tiempo de ejecución definida enstring.h;sizeofes un operador unario de tiempo de compilación.- Solo
strlen()opera sobre arrays de caracteres;sizeoffunciona con cualquier tipo.
Sintaxis de strlen()
size_t length = strlen(my_string);
Aquí, my_string es un array de caracteres o puntero a una cadena terminada en nulo.
Ejemplo de strlen()
#include <stdio.h> #include <string.h> int main() { char strng[] = "January"; printf("Length of given string is: %zu\n", strlen(strng)); return 0; }
Salida:
Length of given string is: 7
Sintaxis de sizeof()
1) sizeof(tipo)
sizeof(tipo) produce el tamaño del tipo especificado.
#include <stdio.h> #define my_sizeof(type) ((char*)(&type+1) - (char*)&type) int main() { double x; printf("%zu", my_sizeof(x)); return 0; }
Salida:
8
2) sizeof(variable)
Pasa un nombre de variable para obtener su huella de memoria.
#include <stdio.h> int main() { printf("sizeof(char) = %zu\n", sizeof(char)); return 0; }
Salida:
sizeof(char) = 1
3) sizeof(expresión)
Evalúa el tamaño del tipo de una expresión sin calcular su valor.
#include <stdio.h> int main() { char p = 'S'; double q = 4.65; printf("Size of variable p : %zu\n", sizeof(p)); printf("Size of an expression : %zu\n", sizeof(p+q)); int a = (int)(p+q); printf("Size of explicitly converted expression : %zu\n", sizeof(a)); return 0; }
Salida:
Size of variable p : 1 Size of an expression : 8 Size of explicitly converted expression : 4
Comparación visual

A continuación, un resumen lado a lado de los dos constructos.
| Característica | strlen() | sizeof() |
|---|---|---|
| Archivo de cabecera | string.h | No se requiere cabecera (operador integrado) |
| Propósito | Calcular longitud de cadena (excluyendo nulo) | Determinar tamaño de memoria de un tipo o variable |
| Tipo de retorno | size_t | size_t |
| Momento de evaluación | Tiempo de ejecución (puede recorrer la cadena) | Tiempo de compilación (excepto VLA) |
| Aplicable a | Solo arrays de caracteres o punteros a cadenas terminadas en nulo | Todos los tipos de datos y expresiones |
Cuándo usar cada uno
- Usa
strlen()cuando necesites la longitud lógica de una cadena, como para asignación de búfer, extracción de subcadenas o validación de entrada. - Usa
sizeof()cuando necesites el tamaño físico de un tipo de dato o variable, por ejemplo al copiar memoria conmemcpyo asignar un bloque para un array de structs. - Recuerda que
sizeof(char)es siempre 1 byte, la unidad base de memoria en C. - Para literales de cadena,
sizeof("hello")produce 6 (cinco caracteres más el terminador nulo), mientras questrlen("hello")produce 5.
Seguir estas directrices garantiza código C eficiente, portable y mantenible.
Lenguaje C
- Brazing vs. Soldadura Blanda: Diferencias Clave Explicadas
- Motor 2 Tiempos vs 4 Tiempos: Diferencias Clave Explicadas
- Entendiendo Motores DC vs AC: Diferencias Clave y Guía de Compra
- Amianto vs. fibra de vidrio: Diferencias clave, usos y consideraciones de seguridad
- Estructuras vs. Uniones en C: Guía práctica
- C# vs C++: Comparación clara de características, rendimiento y casos de uso
- C vs C++: Diferencias clave y cuándo elegir cada uno
- C vs Java: Comparación exhaustiva de características, historia y aplicaciones
- Python vs JavaScript: Diferencias Clave, Características y Cuándo Elegir Cada Uno
- Python vs Ruby: Comparativa Exhaustiva de Características, Ventajas y Casos de Uso
- Python 2 vs Python 3: Diferencias Clave y Cómo Elegir la Versión Correcta