Obtener la longitud del array de caracteres en C
-
Utilice el operador
sizeof
para encontrar la longitud del array de caracteres -
Utilice la función
strlen
para encontrar la longitud de un array de caracteres
Este artículo explicará varios métodos para obtener la longitud de un array char
en C.
Utilice el operador sizeof
para encontrar la longitud del array de caracteres
El tamaño del array se puede calcular utilizando el operador sizeof
independientemente del tipo de datos del elemento. Aunque, al medir el tamaño del array, puede haber algunos errores horribles si se ignoran los detalles internos.
Es decir, el siguiente ejemplo está inicializando dos arrays llamadas arr
y arr2
con notaciones diferentes. Luego, los tamaños de ambas matrices se recuperan utilizando el operador sizeof
y se imprimen en la consola.
Tenga en cuenta que el tamaño de la segundo array es igual a 18 bytes aunque solo hay 17 elementos impresos. La causa de este problema se esconde en el método de inicialización, es decir, cuando el array char
se inicializa utilizando un valor literal de cadena, el byte nulo de terminación también se almacena como parte del array. Así, el operador sizeof
incluye este byte en la suma de todos los elementos y devuelve el resultado correspondiente.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
printCharArray(arr, sizeof arr);
printf("size = %lu bytes \n", sizeof arr);
printf("\n");
printCharArray(arr2, sizeof arr2 - 1);
printf("size = %lu bytes \n", sizeof arr2);
exit(EXIT_SUCCESS);
}
Producción :
a, b, c, d, e, f, g,
size = 7 bytes
size = 24 bytes
a, r, r, a, y, , i, n, i, t, i, a, l, i, z, e, d,
size = 18 bytes
size = 17 bytes
Utilice la función strlen
para encontrar la longitud de un array de caracteres
En algunos escenarios, se puede medir el tamaño de los Arrays char
que se inicializaron o almacenaron como cadenas de caracteres terminadas en nulo utilizando la función strlen
, que es parte de las utilidades de cadenas de bibliotecas estándar de C.
Si ejecutamos el código de ejemplo anterior con valores calculados strlen
, obtenemos diferentes números causados por problemas separados. El primer tamaño de objeto - arr
se imprime en 24 bytes porque la función strlen
itera a través de un array de caracteres hasta que se encuentra el byte nulo de terminación. Por lo tanto, llamar a strlen
en el objeto arr
resultó en iterar sobre arr
y arr2
, ya que la primera matriz no termina con un byte nulo y el compilador almacena el arr2
continuamente después de él, lo que da como resultado un tamaño igual a la suma de ambas matrices menos 1 (descartando el byte nulo de terminación).
Tenga en cuenta que, la función lengthOfArray
implementada por nosotros imita el comportamiento de conteo strlen
y da como resultado los mismos números. Para el segundo objeto de array, arr2
, strlen
devolvió el número de caracteres impresos sin el último byte nulo, lo que puede ser útil en algunos escenarios, pero no representa el tamaño real del array.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printCharArray(char *arr, size_t len) {
for (size_t i = 0; i < len; ++i) {
printf("%c, ", arr[i]);
}
printf("\n");
}
long lengthOfArray(const char *arr) {
long size = 0;
while (*arr) {
size += 1;
arr += 1;
}
return size;
}
int main(int argc, char *argv[]) {
char arr[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
char arr2[] = "array initialized";
printCharArray(arr, sizeof arr);
printf("size = %lu bytes \n", sizeof arr);
printf("size = %lu bytes \n", strlen(arr));
printf("size = %lu bytes \n", lengthOfArray(arr));
printf("\n");
printCharArray(arr2, sizeof arr2 - 1);
printf("size = %lu bytes \n", sizeof arr2);
printf("size = %lu bytes \n", strlen(arr2));
printf("size = %lu bytes \n", lengthOfArray(arr2));
exit(EXIT_SUCCESS);
}
Producción :
a, b, c, d, e, f, g,
size = 7 bytes
size = 24 bytes
size = 24 bytes
a, r, r, a, y, , i, n, i, t, i, a, l, i, z, e, d,
size = 18 bytes
size = 17 bytes
size = 17 bytes
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook