char* names[]={"A", "B", "C"};
Existe-t-il un moyen de trouver le nombre de chaînes dans le tableau ? Par exemple, dans ce cas, le résultat devrait être le suivant : 3.
char* names[]={"A", "B", "C"};
Existe-t-il un moyen de trouver le nombre de chaînes dans le tableau ? Par exemple, dans ce cas, le résultat devrait être le suivant : 3.
Un moyen simple de retourne le nombre ou les chaînes dans un tableau est d'itérer sur le tableau jusqu'à ce que vous soyez à court de chaînes. Voici un exemple.
#include <stdio.h>
int main()
{
char* names[] = {"John", "Paul", "George", "Ringo", '\0'};
int size = 0;
while(names[++size]!='\0');
printf("Size: %d\n", size); // Prints "4"
return 0;
}
Cette méthode présente l'avantage de fonctionner même lorsque les cordes sont de longueur variable . Notez l'octet NULL de fin dans le fichier names
et le tableau ;
pour fermer la fenêtre while
car il n'y a pas de corps d'instruction à exécuter.
Cela ne fonctionnerait-il que si le dernier élément de votre tableau *names[] était un NULL et si vous comparez avec un NULL dans la boucle while ? Sinon, vous comptez sur le fait que la mémoire où sont stockées vos chaînes de caractères soit "mise à zéro", ce qui n'est pas toujours le cas ! Le code ci-dessus n'est donc pas très sûr ou fiable.
Pour ajouter à ce qui précède, je crois comprendre que dans le code ci-dessus, vous stockez un tableau de pointeurs vers des chaînes de caractères. Ce tableau a actuellement 4 éléments (c'est-à-dire 4 pointeurs vers vos chaînes). Chaque chaîne est à terminaison nulle, mais votre tableau de pointeurs n'a pas par défaut d'enregistrement de terminaison - vous devez le définir manuellement, et NULL
est un bon candidat pour le dernier disque. De cette façon, vous pouvez facilement le reconnaître dans votre while
en la comparant à NULL
. J'espère que mon explication est claire et que ma compréhension est correcte.
@mike : Vous avez raison et j'ai modifié le code pour tenir compte de votre observation. Je vous remercie de votre attention.
trouver le nombre de chaînes de caractères dans un tableau de chaînes de caractères en C
La méthode simple pour trouver le nombre d'objets dans un tableau consiste à prendre la taille du tableau divisée par la taille d'un de ses éléments. Utilisez la fonction sizeof
qui renvoie la taille de l'objet en octets.
// For size_t
#include <stddef.h>
char* names[] = { "A", "B", "C" };
size_t number_of_strings = sizeof names / sizeof names[0];
printf("Number of strings %zu\n", number_of_strings);
Il est important de considérer le type de retour de sizeof
es size_t
un type d'entier non signé capable d'indexer n'importe quel tableau ainsi que la taille de n'importe quel objet. Pour imprimer une variable de type size_t
utiliser le modificateur z
.
Quelle sera la réponse à la question suivante
size_t arrLength( char** arr) {
size_t i = 0;
size_t count = 0;
int len;
len = sizeof(**arr) / sizeof(arr[0]);
for (i = 0; i < len; i++) {
printf("%zu - %s\n", count + 1, *(arr + i));
count++;
}
return count;
}
int main(void) {
char* names[] = { "Jimmy", "Tom", "Michael", "Maria", "Sandra", "Madonna" };
size_t length, size;
//size = sizeof(names) / sizeof(names[0]);
length = arrLength(names);
printf("\n");
printf("The number of strings found are %zu\n", length);
return 0;
}
Je reçois 1
Faire le Array Of Strings pour fonctionner dans un Boucle While avec un opérateur d'incrémentation, jusqu'à ce que la boucle devienne NULL donne la taille du tableau :
#include<stdio.h>
char* names[]={"A", "B", "C"};
int main(){
int nameSize = 0;
while(names[++nameSize]!='\0');
}
for(i=0;i<nameSize;i++){
printf("%s\n", names[i]);
}
return 0;
}
Sortie :
A
B
C
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
2 votes
Il s'agit d'un cas spécifique de comment obtenir la taille d'un tableau, qui a déjà une réponse générale ici : stackoverflow.com/questions/37538/ C'est-à-dire un double.