web-dev-qa-db-fra.com

Recherche de la longueur du tableau de caractères

J'ai du code comme suit:

int i=0;
char a[7]={0x00,0xdc,0x01,0x04};
int len=0;
len = sizeof(a);
printf("The Length is : %d", len);

Ici, je veux trouver la longueur du tableau a en c? Comment cela peut-il être fait?

24
Nikhil

Par convention, les chaînes C sont "à terminaison nulle". Cela signifie qu'il y a un octet supplémentaire à la fin avec la valeur zéro (0x00). Toute fonction qui fait quelque chose avec une chaîne (comme printf) considérera une chaîne comme terminée quand elle trouvera null. Cela signifie également que si votre chaîne n'est pas terminée par null, elle continuera jusqu'à ce qu'elle trouve un caractère nul, ce qui peut produire des résultats intéressants!

Comme le premier élément de votre tableau est 0x00, il sera considéré comme étant de longueur zéro (pas de caractères).

Si vous avez défini votre chaîne comme:

char a[7]={0xdc,0x01,0x04,0x00};

par exemple. terminé par null

vous pouvez alors utiliser strlen pour mesurer la longueur de la chaîne stockée dans le tableau.

sizeof mesure la taille d'un type. Ce n'est pas ce que tu veux. N'oubliez pas non plus que la chaîne d'un tableau peut être plus courte que la taille du tableau.

31
Joe

sizeof renvoie la taille du type de la variable en octets. Donc dans votre cas, il retourne la taille de votre char[7] Qui est 7 * sizeof(char). Depuis sizeof(char) = 1, le résultat est 7.

Étendre ceci à un autre exemple:

int intArr[5];
printf("sizeof(intArr)=%u", sizeof(intArr));

donnerait 5 * sizeof(int), donc vous obtiendriez le résultat "20" (au moins sur une plate-forme 32 bits régulière. Sur d'autres sizeof(int) pourrait différer)

Pour revenir à votre problème:

Il semble que ce que vous voulez savoir, c'est la longueur de la chaîne contenue dans votre tableau et non la taille totale du tableau.

Par définition, les chaînes C doivent se terminer par un "\ 0" (0 octet). Donc, pour obtenir la longueur appropriée de la chaîne contenue dans votre tableau, vous devez d'abord terminer la chaîne, afin de pouvoir dire quand elle est terminée. Sinon, il y aurait maintenant moyen de savoir.

Toutes les fonctions standard s'appuient sur cette définition, donc si vous appelez strlen pour récupérer le str ing len gth, il parcourra le tableau donné jusqu'à ce qu'il trouve le premier 0 octet, qui dans votre cas serait le tout premier élément.

Une autre chose que vous devrez peut-être savoir uniquement parce que vous ne remplissez pas les éléments restants de votre char[7] Avec une valeur, ils contiennent en fait des valeurs aléatoires non définies.

J'espère que cela a aidé.

3
lx.

Si vous attendez 4 en sortie, essayez ceci:

char a []= {0x00,0xdc, 0x01,0x04};

3

Vous pouvez essayer ceci:

   char tab[7]={'a','b','t','u','a','y','t'};
   printf("%d\n",sizeof(tab)/sizeof(tab[0]));
1
andrew

Vous pouvez faire len = sizeof(a)/sizeof(*a) pour tout type de tableau. Mais, vous l'avez initialisé comme a[7] = {...} ce qui signifie que sa longueur est de 7 ...

0
Mayank