Obter comprimento do array Char em C

Jinku Hu 12 outubro 2023
  1. Use o operador sizeof para localizar o comprimento do array de caracteres
  2. Use a função strlen para encontrar o comprimento do array Char
Obter comprimento do array Char em C

Este artigo irá explicar vários métodos para obter o comprimento de um array char em C.

Use o operador sizeof para localizar o comprimento do array de caracteres

O tamanho do array pode ser calculado usando o operador sizeof, independentemente do tipo de dado do elemento. Embora, ao medir o tamanho do array, possa haver alguns erros hediondos se os detalhes internos forem ignorados.

A saber, o exemplo a seguir está inicializando duas arrays chamadas arr e arr2 com notações diferentes. Em seguida, os tamanhos de ambas as arrays são recuperados usando o operador sizeof e impressos no console.

Observe que o tamanho do segundo array é igual a 18 bytes, embora haja apenas 17 elementos impressos. A causa deste problema está oculta no método de inicialização, ou seja, quando o array char é inicializado usando um valor literal de string, o byte nulo de terminação também é armazenado como parte do array. Assim, o operador sizeof inclui este byte na soma de todos os elementos e retorna o resultado correspondente.

#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);
}

Resultado:

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

Use a função strlen para encontrar o comprimento do array Char

Em alguns cenários, arrays char que foram inicializados ou armazenados como cadeias de caracteres terminadas em nulo podem ser medidos quanto ao tamanho usando a função strlen, que faz parte dos utilitários de cadeia de caracteres da biblioteca C padrão.

Se executarmos o código de exemplo anterior com valores calculados strlen, obteremos números diferentes causados por problemas separados. O primeiro - tamanho do objeto arr é impresso com 24 bytes porque a função strlen itera através de um array char até que o byte nulo final seja encontrado. Assim, chamar strlen no objeto arr resultou na iteração sobre arr e arr2, uma vez que o primeiro array não termina com byte nulo e o compilador armazenou o arr2 continuamente depois dele, resultando em um tamanho igual à soma de ambas as arrays menos 1 (descartando o byte nulo de terminação).

Observe que a função lengthOfArray implementada por nós imita o comportamento de contagem strlen e resulta nos mesmos números. Para o segundo objeto de array - arr2, strlen retornou o número de caracteres impressos sem o último byte nulo, o que pode ser útil em alguns cenários, mas não representa o tamanho real do 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);
}

Resultado:

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

Artigo relacionado - C Char