2010-11-18 6 views
0

Я имею эту структуру:Как я могу справиться с массивом структур?

#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; 

Мне нужно создать массив из этой структуры, я это сделал

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

Если я хочу поставить строку, которая у меня была в с во имя, Я сделал это:

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

но это не работает для меня, может ли кто-нибудь помочь?

ответ

5

Избавиться от * в этой строке:

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

И использовать точечный синтаксис для доступа к члену структуры в strcpy:

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

я принять его, но я теперь получаю сообщение об ошибке в STRCPY функции ,, –

+0

@Rami - обновлена. –

+0

thx man :) ,, it work –

0

Я думаю, вам нужно использовать

variable vars[512]; 

вместо

variable *vars[512] 
1

Вы выделили массив указателей к вашей структуре, но никогда не создавали экземпляры (выделенную память) из них. Вы можете либо сделать его массивом структур (без указателей), так что вам не нужно беспокоиться об управлении памятью.

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 */ 

Или, по крайней мере, выделить память для структуры, прежде чем использовать его (и инициализирует все другие указатели на 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)); 
} 
Смежные вопросы