HOWTO · C

Obtenir la longueur du tableau de caractères en C

Cet article montre comment obtenir la longueur d'un tableau de caractères en C

Sur cette page

En C, « longueur » peut désigner le nombre d’éléments réservés dans un tableau de char ou le nombre de caractères précédant le caractère nul de fin d’une chaîne. Utilisez sizeof pour connaître la taille de stockage et le nombre d’éléments d’un tableau tant que son type de tableau est disponible. Utilisez strlen uniquement avec une chaîne valide terminée par un caractère nul.

Comment obtenir la longueur d’un tableau de caractères en C avec l’opérateur sizeof

sizeof array donne la taille du tableau en octets C. Divisez ce résultat par sizeof array[0] pour obtenir le nombre d’éléments. Chaque élément d’un tableau de char occupe un octet C ; un octet C n’est pas nécessairement un octet de huit bits.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <stdio.h>

int main(void) {
  char letters[] = {'C', 'o', 'd', 'e'};
  char word[] = "Code";
  size_t letters_count = sizeof letters / sizeof letters[0];
  size_t word_capacity = sizeof word / sizeof word[0];
  size_t word_length = word_capacity - 1;

  printf("letters: %zu elements, %zu bytes\n", letters_count, sizeof letters);
  printf("word: %zu characters, %zu elements including '\\0'\n",
         word_length, word_capacity);
  return 0;
}
letters: 4 elements, 4 bytes
word: 4 characters, 5 elements including '\0'

L’initialiseur de letters réserve quatre éléments et ne contient pas de caractère nul de fin. Le littéral de chaîne initialise word avec cinq éléments : quatre caractères visibles et le \0 final. Ne soustrayez un élément que si vous savez que le tableau contient ce caractère de fin et que vous cherchez la longueur de la chaîne. %zu est le spécificateur de conversion printf correspondant à size_t.

sizeof mesure le tableau entier uniquement là où son type de tableau est disponible. Dans un paramètre de fonction tel que char text[], le paramètre est ajusté en pointeur ; sizeof text mesure alors le pointeur. Si une fonction a besoin de la longueur du tableau, transmettez séparément le nombre d’éléments. Consultez size_t pour le type non signé utilisé pour les tailles.

Comment obtenir la longueur d’un tableau de caractères en C avec la fonction strlen

strlen, déclarée dans <string.h>, compte les caractères jusqu’au premier \0, sans l’inclure. Son argument doit pointer vers une chaîne valide terminée par un caractère nul. Cette fonction ne connaît pas la capacité du tableau et ne peut pas trouver sans risque la fin d’un tableau dépourvu de caractère de fin. Consultez les chaînes terminées par un caractère nul pour comprendre cette représentation ; aucune cible française n’est disponible dans l’inventaire fourni.

Par exemple, strlen("Code") renvoie quatre : le littéral contient cinq éléments de tableau, mais le caractère nul de fin n’est pas compté. Cet appel convient parce que le littéral fournit ce caractère. N’appelez pas strlen sur un tableau de taille explicite à moins de savoir qu’un caractère nul se trouve dans la partie accessible du tableau.

Comment obtenir la longueur d’un tableau de caractères en C par comptage manuel

Le comptage manuel est utile lorsque vous disposez d’une borne ou d’un caractère de fin valide. Pour un tableau dont le nombre d’éléments count est connu, parcourez les indices de 0 à count - 1 ; ne lisez pas array[count]. Si vous cherchez la longueur d’une chaîne stockée dans ce tableau, arrêtez-vous à \0 et veillez à ce que le parcours ne dépasse jamais la borne du tableau.

Cet exemple utilise le nombre d’éléments du tableau comme borne et s’arrête aussi à son caractère de fin. Comme text est initialisé à partir d’un littéral de chaîne, son caractère de fin se trouve dans le tableau. La boucle vérifie la borne avant de lire chaque élément ; elle n’accède donc jamais à text[sizeof text]. L’exemple affiche 4, soit les quatre caractères de Code.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <stdio.h>

int main(void) {
  char text[] = "Code";
  size_t length = 0;
  size_t capacity = sizeof text / sizeof text[0];

  while (length < capacity && text[length] != '\0') {
    ++length;
  }

  printf("%zu\n", length);
  return 0;
}

Pour des données sans caractère de fin, utilisez le nombre d’éléments transmis séparément et traitez uniquement ces éléments ; ne poursuivez pas le parcours jusqu’à \0 sans garantie qu’un caractère nul se trouve dans la borne.

Comment obtenir la longueur d’un tableau de caractères en C avec des pointeurs

Un pointeur peut parcourir une chaîne, mais il ne contient pas la capacité du tableau. Pour une chaîne valide terminée par un caractère nul, le parcours peut avancer tant que *ptr != '\0' ; la même exigence de terminaison s’applique qu’avec strlen. Cet exemple prend l’adresse d’un tableau créé à partir d’un littéral de chaîne : un caractère de fin est donc garanti dans la borne connue. Il vérifie le pointeur de fin avant le déréférencement et s’arrête également au caractère nul. L’exemple affiche 4, soit les quatre caractères de Code.

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

#include <stdio.h>

int main(void) {
  char text[] = "Code";
  char *ptr = text;
  char *end = text + sizeof text / sizeof text[0];

  while (ptr < end && *ptr != '\0') {
    ++ptr;
  }

  printf("%zu\n", (size_t)(ptr - text));
  return 0;
}

Pour des données sans caractère de fin, conservez un compteur ou un pointeur de fin distinct et arrêtez le parcours à cette borne connue. Si une fonction reçoit un pointeur vers le premier élément, transmettez aussi le nombre d’éléments lorsqu’elle doit parcourir un tableau dont la longueur n’est pas indiquée par un terminateur de chaîne. L’arithmétique des pointeurs ne permet pas à elle seule de déterminer la fin d’un tableau. Consultez la longueur d’un tableau en C pour la distinction connexe sur la taille des tableaux.

Conclusion

Choisissez la mesure adaptée à votre tâche : sizeof array / sizeof array[0] donne le nombre d’éléments du tableau lorsque son type complet est disponible ; ne soustrayez le caractère de fin que pour un tableau dont la présence est garantie, si vous cherchez la longueur de la chaîne. strlen compte les caractères précédant \0 dans une chaîne valide terminée par un caractère nul. Le parcours manuel ou par pointeur exige un caractère de fin valide ou une borne explicite. Conservez la longueur des tableaux lorsque vous les transmettez à des fonctions, car leurs paramètres sont des pointeurs.