web-dev-qa-db-fra.com

Recherche de la longueur d'un tableau de caractères en C

En C, comment peut-on trouver la longueur d’un tableau de caractères? 

J'accepterai volontiers le code de support, mais je ne suis pas opposé à ce que quelqu'un l'écrive s'il le souhaite :)

41
not_l33t

À condition que le tableau de caractères soit null terminé,

char chararray[10];
size_t len = strlen(chararray);
65
Daniel A. White

Si vous avez un tableau , vous pouvez trouver le nombre d'éléments dans le tableau en divisant la taille du tableau en octets par la taille de chaque élément en octets:

char x[10];
int elements_in_x = sizeof(x) / sizeof(x[0]);

Pour le cas spécifique de char, puisque sizeof(char) == 1, sizeof(x) donnera le même résultat.

Si vous avez seulement un pointeur sur un tableau , il n’ya aucun moyen de trouver le nombre d’éléments dans le tableau pointé. Vous devez suivre cela vous-même. Par exemple, étant donné:

char x[10];
char* pointer_to_x = x;

il n'y a aucun moyen de savoir à partir de pointer_to_x qu'il pointe vers un tableau de 10 éléments. Vous devez suivre vous-même ces informations.

Il existe de nombreuses façons de le faire: vous pouvez soit stocker le nombre d’éléments dans une variable, soit coder le contenu du tableau de manière à obtenir sa taille en analysant son contenu (c’est effectivement ce que font les chaînes à zéro. : ils placent un caractère '\0' à la fin de la chaîne pour que vous sachiez quand la chaîne se termine).

13
James McNellis

Bonjour, bien que les réponses ci-dessus soient correctes, voici ma contribution à votre question.

//returns the size of a character array using a pointer to the first element of the character array
int size(char *ptr)
{
    //variable used to access the subsequent array elements.
    int offset = 0;
    //variable that counts the number of elements in your array
    int count = 0;

    //While loop that tests whether the end of the array has been reached
    while (*(ptr + offset) != '\0')
    {
        //increment the count variable
        ++count;
        //advance to the next element of the array
        ++offset;
    }
    //return the size of the array
    return count;
}

Dans la fonction main, vous appelez la taille de la fonction en passant l'adresse du premier élément de votre tableau.

char myArray[] = {'h', 'e', 'l', 'l', 'o'};
printf("The size of my character array is: %d\n", size(&myArray[0]));

Bonne chance

7
SteveMoros

Si vous voulez que la longueur du tableau de caractères utilise sizeof(array)/sizeof(array[0]), si vous voulez la longueur de la chaîne, utilisez strlen(array).

5
onemasse

Vous pouvez utiliser strlen

strlen(urarray);

Vous pouvez le coder vous-même pour comprendre comment cela fonctionne

size_t my_strlen(const char *str)
{
  size_t i;

  for (i = 0; str[i]; i++);
  return i;
}

si vous voulez la taille du tableau, vous utilisez sizeof

char urarray[255];
printf("%zu", sizeof(urarray));
4
dco

Il existe également un formulaire compact pour cela, si vous ne voulez pas vous fier à strlen. En supposant que le tableau de caractères que vous envisagez soit "msg": 

  unsigned int len=0;
  while(*(msg+len) ) len++;
2
Imre Kiss

En disant "tableau de caractères", vous voulez dire une chaîne? Comme "bonjour" ou "hahaha c'est une chaîne de caractères" ..

Quoi qu'il en soit, utilisez strlen () . Lire un peu à ce sujet, il y a beaucoup d'informations à ce sujet, comme ici .

0
Poni

en utilisant sizeof ()

char h[] = "hello";
printf("%d\n",sizeof(h)-1); //Output = 5

en utilisant string.h

#include <string.h>

char h[] = "hello";
printf("%d\n",strlen(h)); //Output = 5

using function (strlen implementation )

int strsize(const char* str);
int main(){
    char h[] = "hello";
    printf("%d\n",strsize(h)); //Output = 5
    return 0;
}
int strsize(const char* str){
    return (*str) ? strsize(++str) + 1 : 0;
}
0
X Stylish