Ottieni la lunghezza di un array di caratteri in C
-
Usa l’operatore
sizeof
per trovare la lunghezza dell’array di caratteri -
Usa la funzione
strlen
per trovare la lunghezza dell’array di caratteri
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
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