Как я могу иметь дело с массивом структур? - PullRequest
0 голосов
/ 18 ноября 2010

У меня есть такая структура:

#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

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

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

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

Ответы [ 4 ]

5 голосов
/ 18 ноября 2010

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

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

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

char *s = "What Ever";
strcpy(vars[0].name,s); 
1 голос
/ 18 ноября 2010

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

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 голосов
/ 18 ноября 2010
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));
}
0 голосов
/ 18 ноября 2010

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

variable vars[512];

вместо

variable *vars[512]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...