43 votes

Trouver le nombre de chaînes de caractères dans un tableau de chaînes de caractères en C

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.

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.

1voto

Marlon Points 11528
int count = sizeof(names)/sizeof(*names);

Cela prend la taille totale de names et le divise par la taille d'un élément dans names ce qui donne 3.

1 votes

"ne fonctionne pas avec la mémoire allouée dynamiquement". Plus précisément, il ne fonctionne pas si le tableau (par opposition à "les membres du tableau") a été alloué dynamiquement. Comme il s'agit d'un tableau de pointeurs, la distinction doit être faite.

0voto

dotancohen Points 4657

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.

2 votes

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.

2 votes

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.

0 votes

@mike : Vous avez raison et j'ai modifié le code pour tenir compte de votre observation. Je vous remercie de votre attention.

0voto

chux Points 13185

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 .

0voto

sobin thomas Points 21

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

-7voto

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

0 votes

C'est une erreur (et un danger) ! Je me demande pourquoi il ne s'est pas écrasé.

0 votes

Il ne compile même pas.

Prograide.com

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.

Powered by:

X