2010-11-18 26 views
0

Je possède ce struct:Comment puis-je gérer un ensemble de structures?

#define sbuffer 128 
#define xbuffer 1024 

typedef struct{ 
    char name[sbuffer]; 
    char att[sbuffer]; 
    char type[sbuffer]; 
    int noOfVal; 
    int ints[xbuffer]; 
    double doubles[xbuffer]; 
    char *strings[xbuffer]; 
} variable; 

Je dois créer un tableau de cette structure, je l'ai fait

variable *vars[512]; //is it right 

Si je veux mettre une chaîne que j'avais en s dans le nom, Je l'ai fait:

char *s = "What Ever"; 
strcpy(vars[0]->name,s); 

mais cela ne fonctionne pas pour moi, quelqu'un peut-il aider?

Répondre

5

Débarrassez-vous de la * dans cette ligne:

variable *vars[512]; //is it right 

Et utiliser syntaxe de point pour accéder au membre struct dans strcpy:

char *s = "What Ever"; 
strcpy(vars[0].name,s); 
+0

je le sortir mais je reçois maintenant une erreur dans la fonction strcpy ,, –

+0

@Rami - mis à jour. –

+0

thx man :) ,, ça marche –

0

Je pense que vous devez utiliser

variable vars[512]; 

au lieu de

variable *vars[512] 
1

Vous avez alloué un tableau de pointeurs à votre struct, mais jamais créé des instances (de mémoire allouée) d'entre eux. Vous pouvez soit en faire un tableau des structures (sans les pointeurs), donc vous n'avez pas à vous soucier de la gestion de la mémoire.

char *s = "What Ever"; 
variable vars[512]; /* an array of your structure */ 
strcpy(vars[0].name,s); /* <- use dot operator here since they are no longer pointers */ 

Ou au moins allouer de la mémoire pour la structure avant de l'utiliser (et initialiser tous les autres pointeurs vers NULL).

char *s = "What Ever"; 
variable *vars[512]; /* an array of pointers to your structure */ 
vars[0] = (variable *)malloc(sizeof(variable)); /* dynamically allocate the memory */ 
strcpy(vars[0]->name,s); /* <- used arrow operator since they are pointers */ 
0
variable *vars[512] = {NULL}; 

int i = 0; 

//i may get a value in some way 

if (NULL == vars[i]){ 
    vars[i] = (variable *)malloc(sizeof(struct variable)); 
}