вот код, который обещал выложить. это описание списка, который содержит еще один список.
<<< cut begin >>>
typedef struct data_define {
	char * templ;
	char * descr;
} Data;
typedef struct Nod_define {
	Data data;
	struct Nod_define * next;
} Nod;
typedef struct Spisok_define {
	Nod * start, *current;
	char * Name;
	char * FileName;
	char * Template;
	unsigned long Count;
} Spisok;
/*
 * TEMPLATE LIST
 */
typedef struct Template_data_define {
	Spisok * List;
} Template_Data;
typedef struct Template_Nod_define {
	Template_Data data;
	struct Template_Nod_define * next;
} Template_Nod;
typedef struct Template_Spisok_define {
	Template_Nod * start, *current;
	unsigned long Count;
} Template_Spisok;
void Init_Spisok(Spisok *L);
unsigned int Spisok_Add(Spisok *L, Data *dt);
Data * Spisok_Get(Spisok *L, unsigned int z);
void Spisok_Delete(Spisok *L,unsigned int z);
void Init_Template_Spisok(Template_Spisok *L);
unsigned int Template_Spisok_Add(Template_Spisok *L, Template_Data *dt);
Template_Data * Template_Spisok_Get(Template_Spisok *L, unsigned int z);
void Template_Spisok_Delete(Template_Spisok *L,unsigned int z);
void Init_Spisok(Spisok *L)
{
	L->start = L->current = NULL;
	L->Count = 0;
};
unsigned int Spisok_Add(Spisok *L, Data *dt)
{
	Nod * p;
	if (!(p = (Nod *) malloc(sizeof(Nod))))
		return RES_FALSE;
	
	p->data = *dt;
	p->next = NULL;
	if(!L->start)
		L->start = L->current = p;
	else
		L->current = L->current->next = p;
        L->Count++;
	return RES_TRUE;
};
Data * Spisok_Get(Spisok *L, unsigned int z)
{
	unsigned int i;
	Nod * t;
	t = L->start;
	
	for(i=0;i<z;i++) {
		if(t->next) 
			t = t->next;
		else 
			return &(t->data);
	}
	return &(t->data);
};
void Spisok_Delete(Spisok *L,unsigned int z)
{
	unsigned int i;
	Nod *t,*p;
	
	if (L->Count == 0)
		return;
	if( z == 0 || L->Count == 1) {
		p = L->start;
		L->start = L->start->next;
		free(p);
	}
	else {
		t = L->start;
		
		for (i=0;i<(z-1);i++)
			if (t->next->next) 
				t = t->next;
		
		p = t->next;
		if (!t->next->next) 
			L->current = t;
		t->next = t->next->next;
		free(p);
	}
	
	if (L->Count)
		L->Count--;
};
void Init_Template_Spisok(Template_Spisok *L)
{
	L->start = L->current = NULL;
	L->Count = 0;
};
unsigned int Template_Spisok_Add(Template_Spisok *L, Template_Data *dt)
{
	Template_Nod * p;
	if (!(p = (Template_Nod *) malloc(sizeof(Template_Nod))))
		return RES_FALSE;
	p->data = *dt;
	p->next = NULL;
	
	if(!L->start)
		L->start = L->current = p;
	else
		L->current = L->current->next = p;
        L->Count++;
	return RES_TRUE;
};
Template_Data * Template_Spisok_Get(Template_Spisok *L, unsigned int z)
{
	unsigned int i;
	Template_Nod * t;
	t = L->start;
	
	for(i=0;i<z;i++) {
		if(t->next) 
			t = t->next;
		else 
			return &(t->data);
	}
	return &(t->data);
};
void Template_Spisok_Delete(Template_Spisok *L,unsigned int z)
{
	unsigned int i;
	Template_Nod *t,*p;
	
	if (L->Count == 0)
		return;
	if( z == 0 || L->Count == 1) {
		p = L->start;
		L->start = L->start->next;
		free(p);
	}
	else {
		t = L->start;
		
		for (i=0;i<(z-1);i++)
			if (t->next->next) 
				t = t->next;
		
		p = t->next;
		if (!t->next->next) 
			L->current = t;
		t->next = t->next->next;
		free(p);
	}
	
	if (L->Count)
		L->Count--;
};
<<< cut end >>>
Пример работы со списком:
char * find_templ_decr(char * templ)
{
	unsigned int i,k;
	unsigned int find = 0;
	char * result = NULL;
	Spisok * Ls;
	Data * Dt;
	Template_Data * TMPDt;
	for (i=0;i<TMPS.Count && !find;i++) {
		TMPDt = Template_Spisok_Get(&TMPS,i);
		Ls = TMPDt.List;
		if (strcmp(Ls->Name, cfg_mode.type_os) == 0)
			for (k=0;k<Ls->Count && !find;k++) {
				Dt = Spisok_Get(Ls,k);
				if (strcmp(Dt.templ, templ) == 0) {
					result = (char *)strdup(Dt->descr);
					find = 1;
					goto end_search;
				}
			}
	}
end_search:
	return result;
};
<<< cut end >>>
Больше спасибо тому, кто взглянет на код, и выскажет свои мысли.
Ведь где-то там ошибка !

    
      Ответ на:
      
          комментарий
        от Reset 
  
    
      Ответ на:
      
          комментарий
        от nial 
  
    
      Ответ на:
      
          комментарий
        от sS 
  
    
      Ответ на:
      
          комментарий
        от sS 
  
    
      Ответ на:
      
          комментарий
        от nial 
  
    
      Ответ на:
      
          комментарий
        от sS 
  
    
        Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
      
Похожие темы
- Форум Ошибка в коде... (2006)
 - Форум Чем чревата прямая инкапусляция структур в си? (2016)
 - Форум Насколько это легально? (2016)
 - Форум Код ядра (сетевая подсистема) (2005)
 - Форум не компилится код (2010)
 
- Форум Help with realloc() wanted. (2006)
 - Форум Глюк GCC? (2010)
 - Форум Соединится с сервером по сокету? (2020)
 - Форум Теряется *char. (2005)
 - Форум Вывести содержание бинарного файла (2013)