Ottieni la lunghezza di un array di caratteri in C

Jinku Hu 12 ottobre 2023
  1. Usa l’operatore sizeof per trovare la lunghezza dell’array di caratteri
  2. Usa la funzione strlen per trovare la lunghezza dell’array di caratteri
Ottieni la lunghezza di un array di caratteri in C

Questo articolo spiegherà diversi metodi per ottenere la lunghezza di un array char in C.

Usa l’operatore sizeof per trovare la lunghezza dell’array di caratteri

La dimensione dell’array può essere calcolata utilizzando l’operatore sizeof indipendentemente dal tipo di dati dell’elemento. Sebbene, quando si misurano le dimensioni dell’array, potrebbero esserci degli orribili errori se i dettagli interni vengono ignorati.

Vale a dire, il seguente esempio sta inizializzando due array denominati arr e arr2 con notazioni diverse. Quindi le dimensioni di entrambi gli array vengono recuperate utilizzando l’operatore sizeof e stampate sulla console.

Notare che la dimensione della seconda matrice è uguale a 18 byte anche se sono presenti solo 17 elementi stampati. La causa di questo problema si nasconde nel metodo di inizializzazione, vale a dire quando l’array char viene inizializzato utilizzando un valore letterale stringa, anche il byte nullo di terminazione viene memorizzato come parte dell’array. Quindi l’operatore sizeof include questo byte nella somma di tutti gli elementi e restituisce il risultato corrispondente.

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

Produzione:

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

Usa la funzione strlen per trovare la lunghezza dell’array di caratteri

In alcuni scenari, gli array char che sono stati inizializzati o memorizzati come stringhe di caratteri con terminazione null possono essere misurati per la dimensione utilizzando la funzione strlen, che fa parte delle utilità di stringa della libreria standard del C.

Se eseguiamo il codice di esempio precedente con valori calcolati strlen, otteniamo numeri diversi causati da problemi separati. La dimensione del primo oggetto arr viene stampata per essere 24 byte perché la funzione strlen itera attraverso un array di caratteri finché non incontra il byte nullo di terminazione. Quindi, chiamare strlen su un oggetto arr ha prodotto un’iterazione sia su arr che su arr2, poiché il primo array non termina con un byte nullo e il compilatore memorizza continuamente arr2 dopo di esso, risultando in una dimensione uguale alla somma di entrambi gli array meno 1 (scartando il byte nullo di terminazione).

Nota che la funzione lengthOfArray da noi implementata imita il comportamento di conteggio strlen e restituisce gli stessi numeri. Per il secondo oggetto array - arr2, strlen ha restituito il numero di caratteri stampati senza l’ultimo byte nullo, che può essere utile in alcuni scenari, ma non rappresenta la dimensione effettiva dell’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);
}

Produzione:

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
Autore: 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

Articolo correlato - C Char