Obtenir la longueur du tableau de caractères en C
-
Utilisez l’opérateur
sizeof
pour trouver la longueur du tableau de caractères -
Utilisez la fonction
strlen
pour trouver la longueur du tableau de caractères
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
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