Здравствуйте.есть структра
struct _cfg {
char var[256];
char val[256];
struct _cfg *next;
} *cfg;циклом перебираю файл. из каждой строчки заносятся (должны заносится) данные в массив.
я думаю надо делать через calloc, для инициализации массива, или я что-то неправильно думаю?
Книгу по этой теме заштудировал, но не черта не понял, хочется так сказать из первых рук :-)
Заранее спасибо!
Немного разобрался.
Делаю вот так:struct _cfg {
char *var;
char *val;
struct _cfg *next;
} *cfg;struct _cfg *ptr;
while(...)
{
for(ptr = cfg; ptr != NULL; ptr = ptr->next);ptr = calloc(1, sizeof(struct _cfg));
ptr->var = malloc(strlen(var));
ptr->val = malloc(strlen(val));
strcpy(ptr->var, var);
strcpy(ptr->val, val);
}но это не конченая штука. Не работает так как надо.
Надо что-то добавить, чтобы всё заносилось в cfg.
А то ента штука всё на первом уровне только изменяет (next не трогает).
>Немного разобрался.
>Делаю вот так:
>
>struct _cfg {
> char *var;
> char *val;
> struct _cfg *next;
>} *cfg;
>
>struct _cfg *ptr;
>while(...)
>{
> for(ptr = cfg; ptr != NULL; ptr = ptr->next);
>
> ptr = calloc(1, sizeof(struct
>_cfg));
> ptr->var = malloc(strlen(var));
> ptr->val = malloc(strlen(val));
> strcpy(ptr->var, var);
> strcpy(ptr->val, val);
>}
>
>но это не конченая штука. Не работает так как надо.
>Надо что-то добавить, чтобы всё заносилось в cfg.
>А то ента штука всё на первом уровне только изменяет (next не
>трогает).struct _cfg *head=NULL;
struct _cfg *ptr=NULL, *ptr1=NULL;while(!feof())
{
ptr =(struct _cfg *)malloc( ... );
ptr->next = NULL;ptr->var = ...
ptr->val = ...if( head == NULL ) head = ptr; else ptr1->next = prt;
ptr1 = ptr;
}Что-то типа этого если хочешь список делать
в head будет голова списка
Спасибо работает. Я тут сам вариант придумал, но ваша версия покороче будет!
Вот мой вариант:struct _cfg *cfg, *ptr;
if(cfg == NULL)
{
cfg = calloc(1, sizeof(struct config));
cfg->var = malloc(strlen(var));
cfg->val = malloc(strlen(val));
strcpy(cfg->var, var);
strcpy(cfg->val, val);
}
else
{
ptr = calloc(1, sizeof(struct config));
ptr->next = calloc(1, sizeof(struct config));
ptr->var = malloc(strlen(var));
ptr->val = malloc(strlen(val));
strcpy(ptr->var, var);
strcpy(ptr->val, val);
ptr->next = cfg;
cfg = ptr;
}
Вот что ещё спросить хочю, сформировал я эту цепочку,
а как в ней изменить какое-нибудь значение?
Напрмер cfg->next->next->...->val ?