2013-01-11 3 views
0

i ont la structure suivante:pointeur sur struct avec un réseau à deux dimensions

struct dict{ 
int len; 
char (*dict0)[MAX_WORD_LEN+1]; 
char (*dict1)[MAX_WORD_LEN+1]; 

}; Et je fais ceci:

struct dic dictionnaire; struct dict * p_diction = & dictionnaire; mais quand j'essaye de scannerf avec le pointeur au pointeur j'obtiens une erreur, naturellement je suis défini et tout.

scanf ("% 10s", p_diction -> (* (dict0 + i)) [0]);

« identifiant prévu avant « (» jeton

et non, je ne veux pas Scanf en utilisant & dictionnaire, comme cela se produit aussi dans d'autres cas, en plus scanf.

Quelle est la forme correcte pour écrire la commande ?

Répondre

0

Qu'est-ce que vous voulez est

p_diction->dict0[i] 

ou

*(p_diction->dict0 + i) 

Vous devez passer un pointeur vers char pour la conversion %s, de sorte que le char[MAX_WORD_LEN+1] est correct (il sera converti en un pointeur vers la première char dedans).

p_diction->dict0 

vous donne le pointeur sur le char[MAX_WORD_LEN+1], et que vous voulez le i -ème de ces tableaux, vous devez donc augmenter ce pointeur par i. Ensuite, pour obtenir le bon type de pointeur, vous devez déréférencer pour obtenir le tableau. Ensuite, vous pouvez utiliser la conversion automatique tableau à pointeur, ou de transmettre explicitement l'adresse de la première char dans le tableau

&p_diction->dict0[i][0] 

Avec les deux dereferencings vous avez essayé, vous auriez passé un char, ce qui causerait ravage. Vous n'en avez besoin que d'un.

+0

merci, ça a marché. – Thongurf

Questions connexes