trouver le nombre de chaînes dans un tableau de chaînes de caractères en C
char* names[]={"A", "B", "C"};
Est-il un moyen de trouver le nombre de chaînes dans le tableau. Comme, par exemple, dans ce cas, il doit être 3. S'il vous plaît laissez-moi savoir. Merci.
- C'est un cas particulier de la façon d'obtenir la taille d'un tableau, qui dispose déjà d'une manière générale, la réponse ici: stackoverflow.com/questions/37538/... I. e. un duplicata.
Vous devez vous connecter pour publier un commentaire.
Dans ce cas, vous pouvez diviser le total par la taille du premier élément:
Attention tout de même, cela fonctionne avec tableaux. Il ne fonctionnera pas avec les pointeurs.
Pour un tableau, dont les exemples dans la générosité sont, de faire
sizeof(names)/sizeof(names[0])
est suffisante pour déterminer la longueur du tableau.Le fait que les chaînes de caractères dans les exemples sont de longueur différente n'a pas d'importance.
names
est un tableau dechar *
, de sorte que la taille totale du tableau, en octets, est le nombre d'éléments de la matrice fois la taille de chaque élément (c'est à dire unchar *
). Chacun de ces pointeurs peuvent pointer vers une chaîne de caractères de longueur quelconque, ou NULL. N'a pas d'importance.Programme de Test:
De sortie:
EDIT:
À préciser que ceci ne fonctionne que si vous avez défini un tableau, c'est à dire
char *names[]
ouchar names[][]
, et vous êtes dans le champ d'application où le tableau a été défini. Si elle est définie commechar **names
alors vous avez un pointeur qui fonctionne comme un tableau et la technique ci-dessus ne fonctionne pas. De même, sichar *names[]
est un paramètre de la fonction, auquel cas, le tableau se décompose à l'adresse du premier élément.Il dépend de la façon dont votre tableau est créé. En C, il n'y a aucun moyen de vérifier la longueur d'un tableau est un pointeur, sauf si elle a une sentinelle de l'élément, ou un entier passé avec la matrice par un nombre d'éléments dans le tableau. Dans votre cas, vous pouvez utiliser ceci:
Toutefois, si votre tableau est un pointeur,
Vous pouvez soit a un entier qui est constante pour la longueur du tableau:
Ou ajouter une sentinelle de la valeur (par exemple, NULL)
Comme une autre manière, vous pouvez créer une structure qui est rempli avec les valeurs que vous voulez:
Et vous pouvez l'utiliser en tant que tel:
Ce que vous définissez ici n'est pas littéralement un tableau de chaînes de caractères , c'est un tableau de pointeurs sur des caractères. si vous voulez connaître le nombre de chaînes, il vous suffit de compter les pointeurs, donc quelque chose comme
ferait,de cette façon, vous êtes en divisant la taille de la matrice par la taille d'un pointeur.Mais attention, cela ne fonctionne que si la taille du tableau est connu au moment de la compilation(c'est à dire le tableau est allouée de manière statique), si elle est définie de manière dynamique (c'est à dire char** les chaînes), puis
sizeof(strings)
serait de retour de la taille du pointeur de ne pas le tableau.p.s.:la longueur des chaînes n'est pas pertinent, car le tableau n'est même pas "conscient" de ce que les pointeurs pointent.
Cela prend la taille totale de
names
et le divise par la taille d'un élément dansnames
, résultant en 3.Bien sûr, il est, essayez ce qui suit:
Même chose avec:
De sortie:
Ou d'utiliser une Fonction comme ceci:
De sortie:
Une façon simple de retourner le numéro de la ou des chaînes de caractères dans un tableau est d'itérer sur le tableau jusqu'à ce que vous exécutez hors de chaînes. Ici est un exemple.
Cette méthode a l'avantage que cela fonctionne même lorsque les chaînes sont de longueur variable. Note de l'octet NUL final dans le
names
tableau, et le;
de caractère à proximité de lawhile
déclaration comme il n'y a pas de déclaration de corps à exécuter.NULL
est un bon candidat comme le dernier enregistrement. De cette façon, vous pouvez reconnaître facilement dans votrewhile
boucle, en le comparant à desNULL
. J'espère que mon explication est claire et ma compréhension correcte.'\0'
, tandis que correct, en principe, n'est pas sémantiquement clair. La dernière'\0'
représente un pointeur null constante, il est préférable d'utiliserNULL
ou0
là.La méthode simple pour trouver le nombre d'objets dans un tableau est de prendre la taille du tableau divisé par la taille de l'un de ses éléments. Utiliser le
sizeof
opérateur qui renvoie la taille de l'objet en octets.Important de considérer le type de retour de
sizeof
estsize_t
, un type entier non signé capable d'indexer un tableau ainsi que la taille de n'importe quel objet. Pour imprimer une variable de typesize_t
, utilisez le modificateurz
.Faire la Tableau de Chaînes De caractères pour s'exécuter dans un boucle While avec un Opérateur d'Incrémentation, Jusqu'à ce que la boucle se NULL, donne la Taille du Tableau:
De sortie: