Obtenir la longueur du tableau de caractères en C

Jinku Hu 12 octobre 2023
  1. Utilisez l’opérateur sizeof pour trouver la longueur du tableau de caractères
  2. Utilisez la fonction strlen pour trouver la longueur du tableau de caractères
Obtenir la longueur du tableau de caractères en C

Cet article explique plusieurs méthodes pour obtenir la longueur d’un tableau char en C.

Utilisez l’opérateur sizeof pour trouver la longueur du tableau de caractères

La taille du tableau peut être calculée à l’aide de l’opérateur sizeof quel que soit le type de données d’élément. Cependant, lors de la mesure de la taille du tableau, il peut y avoir des erreurs horribles si les détails internes sont ignorés.

À savoir, l’exemple suivant initialise deux tableaux nommés arr et arr2 avec des notations différentes. Ensuite, les tailles des deux tableaux sont récupérées à l’aide de l’opérateur sizeof et imprimées sur la console.

Notez que la deuxième taille du tableau est égale à 18 octets même s’il n’y a que 17 éléments imprimés. La cause de ce problème se cache dans la méthode d’initialisation, à savoir lorsque le tableau char est initialisé à l’aide d’une valeur littérale de chaîne, l’octet nul de fin est également stocké dans le cadre du tableau. Ainsi, l’opérateur sizeof inclut cet octet dans la somme de tous les éléments et renvoie le résultat correspondant.

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

Production:

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

Utilisez la fonction strlen pour trouver la longueur du tableau de caractères

Dans certains scénarios, la taille des tableaux char qui ont été initialisés ou stockés en tant que chaînes de caractères terminées par null peuvent être mesurées à l’aide de la fonction strlen, qui fait partie des utilitaires de chaîne de bibliothèque standard C.

Si nous exécutons l’exemple de code précédent avec des valeurs calculées strlen, nous obtenons des nombres différents causés par des problèmes distincts. La première taille de l’objet arr est imprimée sur 24 octets car la fonction strlen parcourt un tableau de caractères jusqu’à ce que l’octet nul de fin soit rencontré. Ainsi, l’appel de strlen sur l’objet arr a entraîné une itération sur arr et arr2, car le premier tableau ne se termine pas par un octet nul et le compilateur stocke le arr2 en continu après lui, ce qui donne une taille égal à la somme des deux tableaux moins 1 (en ignorant l’octet nul de fin).

Notez que la fonction lengthOfArray implémentée par nous imite le comportement de comptage strlen et donne les mêmes nombres. Pour le deuxième objet tableau - arr2, strlen a renvoyé le nombre de caractères imprimés sans le dernier octet nul, ce qui peut être utile dans certains scénarios, mais il ne représente pas la taille réelle du tableau.

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

Production:

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

Article connexe - C Char