Obtener la longitud del array de caracteres en C

Jinku Hu 12 octubre 2023
  1. Utilice el operador sizeof para encontrar la longitud del array de caracteres
  2. Utilice la función strlen para encontrar la longitud de un array de caracteres
Obtener la longitud del array de caracteres en C

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
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C Char