The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
calloc, !*! Fagot, 27-Сен-06, 14:37  [смотреть все]
Здравствуйте.

есть структра
struct _cfg {
  char var[256];
  char val[256];
  struct _cfg *next;
} *cfg;

циклом перебираю файл. из каждой строчки заносятся (должны заносится) данные в массив.
я думаю надо делать через calloc, для инициализации массива, или я что-то неправильно думаю?
Книгу по этой теме заштудировал, но не черта не понял, хочется так сказать из первых рук :-)
Заранее спасибо!

  • calloc, !*! Fagot, 15:29 , 27-Сен-06 (1)
    Немного разобрался.
    Делаю вот так:

    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 не трогает).

    • calloc, !*! DeepEye, 17:57 , 27-Сен-06 (2)
      >Немного разобрался.
      >Делаю вот так:
      >
      >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 будет голова списка

      • calloc, !*! Fagot, 18:38 , 27-Сен-06 (3)
        Спасибо работает. Я тут сам вариант придумал, но ваша версия покороче будет!
        Вот мой вариант:

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

  • calloc, !*! Fagot, 10:31 , 30-Сен-06 (4)
    Вот что ещё спросить хочю, сформировал я эту цепочку,
    а как в ней изменить какое-нибудь значение?
    Напрмер cfg->next->next->...->val ?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру