2009-11-05 10 views
1

J'apprends le C et je joue avec des pointeurs et des tableaux. Je suis en train de créer un tableau de pointeurs avec le code ci-dessous:C - Eléments en excès dans le tableau

const int NUM_P = 50; // Line 10 
char *pS[NUM_P] = { NULL }; // Line 11 

Je reçois les avertissements et les erreurs suivantes lorsque je compile:

→ gcc -o array.c tableau
array.c : dans la fonction 'principale':
array.c: 11: erreur: objet de taille variable ne peut pas être initialisé
array.c: 11: avertissement: les éléments en excès dans tableau initialiseur
array.c: 11: avertissement: (proche de l'initialisation pour 'pS')

Je ne peux pas comprendre cette erreur, j'ai regardé en ligne et été incapable de trouver une explication et une solution du problème.

Quelqu'un peut-il aider?

Vive

Eef

+0

Qu'est-ce que vous essayez de faire dans "char * pS [NUM_P] = {NULL};"? –

+1

Peut-être que la syntaxe de C est un peu confuse. En C, const int signifie que vous créez une variable que vous prévoyez de ne pas modifier après l'initialisation. En C++ c'est une vraie constante et peut être utilisée comme vous l'avez essayé. –

Répondre

4

Votre principal problème est la ligne d'initialisation (= {NULL};) car apparemment vous ne pouvez pas initialiser un tableau de cette façon lorsque la taille du tableau est une variable. Si vous utilisez #define NUM_P 50 pour forcer la taille du tableau à être une véritable constante de compilation, le tableau n'aura pas de taille variable et votre méthode d'initialisation se compilera correctement.

En note, la différence entre #define NUM_P 50 et const int NUM_P = 50 est que C89 ne permet pas l'utilisation de variables comme dimensions de tableau, mais C99 le fait; Cependant, C99 n'est pas encore entièrement supporté par tous les compilateurs. Le fait que gcc accepte votre tableau de caractères avec une taille de NUM_P n'est pas compatible C89.

Techniquement, vous pouvez utiliser un drapeau sur la ligne de commande pour dire à gcc que vous voulez compiler en C99:

gcc -std=c99 FILE.c 

Par ailleurs, lors de l'apprentissage C, commencer au sommet des erreurs répertoriées et travailler à partir de là. Dans ce cas, les avertissements ne sont pas préoccupants tant que vous n'avez pas pris en compte l'erreur en haut: "l'objet de taille variable peut ne pas être initialisé".

+0

Merci, en prenant '= {NULL};' out réglé le problème et ça fonctionne bien. Je suis en train de suivre le livre 'C - Novice to Professional' et il y avait cela comme partie de la source pour un tutoriel! Cela fonctionne maintenant, merci encore. Eef – RailsSon