The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"calloc"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"calloc"  
Сообщение от Fagot email on 27-Сен-06, 14:37 
Здравствуйте.

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

  • calloc, Fagot, 15:29 , 27-Сен-06, (1)  
    • calloc, DeepEye, 17:57 , 27-Сен-06, (2)  
      • calloc, Fagot, 18:38 , 27-Сен-06, (3)  
  • calloc, Fagot, 10:31 , 30-Сен-06, (4)  

Сообщения по теме [Сортировка по времени, UBB]


1. "calloc"  
Сообщение от Fagot email on 27-Сен-06, 15:29 
Немного разобрался.
Делаю вот так:

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

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

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




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

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