Question

Ceci est en référence à une solution affichée sur: bouclage une matrice de taille fixe sans définir sa taille en C

Voici mon exemple de code:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    static const char *foo[] = {
           "this is a test",
           "hello world",
           "goodbye world",
           "123", 
           NULL
    };

    for (char *it = foo[0]; it != NULL; it++) {
        printf ("str %s\n", it);
    }

    return 0;

}

Essayer de compiler ce qui donne:

gcc -o vararray vararray.c
vararray.c: In function ‘main’:
vararray.c:14: warning: initialization discards qualifiers from pointer target type
vararray.c:14: error: ‘for’ loop initial declaration used outside C99 mode
Était-ce utile?

La solution

En plus de l'initialisation dans la boucle, vous êtes incrémenter au mauvais endroit. Je pense que c'est ce que vous entendez (notez que je ne suis pas exactement un gourou C):

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    static const char *foo[] = {
           "this is a test",
           "hello world",
           "goodbye world",
           "123", 
           NULL
    };
    const char **it;
    for (it=foo; *it != NULL; it++) {
        printf ("str %s\n", *it);
    }

    return 0;

}

Autres conseils

  1. Votre boucle it variable est de type char*, le contenu du tableau sont de type const char*. Si vous changez it être aussi un const char* l'avertissement devrait disparaître.

  2. Vous déclarez it dans la déclaration pour, ce n'est pas autorisé en C avant C99. Déclarer it au début de main() à la place.
    Vous pouvez aussi ajouter -std=c99 ou -std=gnu99 à vos drapeaux gcc pour activer les fonctions linguistiques C99.

Utilisez l'option -std=c99 lors de la compilation de votre code afin d'utiliser les fonctions de C99.

Modifier it type de const char* (pour supprimer les avertissements)

Avant C99, déclarant que le pointeur de caractère dans la boucle est non standard.

Vous avez besoin de deux choses pour que cette compilation sans avertissement: déclarer la const char* it iterator, et de le faire au début de la fonction et non pas dans l'instruction de boucle

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top