Trouver 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 dans c? Comment cela peut-il être fait?

Par convention, les chaînes C sont ‘terminées par un caractère nul’. 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 qu’une chaîne se termine lorsqu’elle trouve la valeur null. Cela signifie également que si votre chaîne n’est pas terminée par une valeur nulle, 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 étant:

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

par exemple, terminé par un zéro

alors vous pouvez 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. Rappelez-vous également que la chaîne dans un tableau peut être plus courte que la taille du tableau.

Si vous attendez 4 comme sortie, essayez ceci:

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

sizeof renvoie la taille du type de la variable en octets. Donc, dans votre cas, il renvoie la taille de votre caractère char[7] qui correspond à 7 * sizeof(char) . Puisque 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 obtiendrez le résultat “20” (au moins sur une plate-forme 32 bits normale. Sur d’autres, sizeof(int) peut différer)

Pour revenir à votre problème:

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

Par définition, les C-Ssortingngs doivent être terminés par un ‘\ 0’ (0-Byte) final. Donc, pour obtenir la longueur appropriée de la chaîne contenue dans votre tableau, vous devez d’abord terminer la chaîne, de sorte que vous puissiez dire quand il est fini. Sinon, il y aurait maintenant moyen de savoir.

Toutes les fonctions standard reposent sur cette définition. Par conséquent, si vous appelez strlen pour récupérer la longueur de chaîne, il parcourra le tableau donné jusqu’à ce qu’il trouve le premier octet 0, qui dans votre cas constituerait le tout premier élément.

Une autre chose dont vous pourriez avoir besoin de savoir est que parce que vous ne remplissez pas les éléments restants de votre caractère char[7] avec une valeur, ils contiennent en réalité des valeurs aléatoires non définies.

J’espère que ça a aidé.

Vous pouvez essayer ceci:

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

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 7 …