>хотел понять списки.
А со списками у тебя все нормально ;-))
ты простно не знаешь где и зачем выделяешь память, ну и так же где ее освобождать.А так же особое внимание обрати на форматирование своего исходного текста, и размещение определений дефайнов, структур, переменных, не смешивай их, и выполняй в одном месте.
Вообщем смотри:
-------------------------
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define COUNT 30
#define FILE_LOG "./pingpong.log"
#define FILE_STATISTICS "./pingpong.conf"
#define DELIMITER "#"
#define OFFLINE "-"
#define ONLINE "+"
#define UNKNOWN "?"
#define MAX_LEN_STR 512
//------------------------------
/*typedef struct Node *link;
typedef *char elemtype;
typedef struct Node
{
elemtype elem;
link next;
} node;
typedef link list;
*/
struct ping {
char *ip;
char *stat;
char *lastonline;
};
struct record {
struct ping host;
struct record *prev;
struct record *next;
};
//------------------------------
//list lst;
void printhost(struct ping *h)
{
printf("%s\t", h->ip);
printf("%s\t", h->stat);
//printf("%s\t\n", h->lastonline);
printf("%s", h->lastonline);
};
/* Shift string to one symbol*/
char* shift(char *s)
{
int length = strlen(s);
int i;
char *ns = s;
*s++;
for(i=0; i<length; ) ns[i++] = *s++;
//printf("Result - %s\n", ns);
return ns;
};
int main()
{
FILE *log;
FILE *statistics;
struct record
*begin = NULL,
*last = NULL,
*list;
char *b,
*bf;
if ((statistics = fopen(FILE_STATISTICS,"r")) == NULL)
fprintf(stderr, "Error during open file - ", FILE_STATISTICS);
else {
/*char *bf = (char*)malloc(sizeof(char));*/
//int i = 0;
while(!feof(statistics)) {
b = (char*)malloc((MAX_LEN_STR+1)*sizeof(char));
if((bf = fgets(b,MAX_LEN_STR,statistics)) != NULL )
while(bf) {
//printf("%s\n", strsep(&bf,"#"));
//printf("%s\n", strsep(&bf,"#"));
//printf("%s\n\n", strsep(&bf,"#"));
last = (struct record*)malloc(sizeof(struct record));
last->host.ip = strsep(&bf, "#");
last->host.stat = strsep(&bf, "#");
last->host.lastonline = strsep(&bf, "#");
if(begin == NULL)
{
last->prev = NULL;
begin = last;
last->next = NULL;
}
else
{
list = begin;
while(list) {
if(list->next == NULL)
{
last->next = NULL;
last->prev = list;
list->next = last;
//printf("Host.ip - %s\n", list->host.ip);
break;
}
list = list->next;
}
}
//printf("%s\t", last->host.ip);
//printf("%s\t", last->host.stat);
//printf("%s\t\n", last->host.lastonline);
}
};
//free(bf);
//free(b);
};
// print all list
printf("Printf all hosts:\n");
list = begin;
while(list)
{
/*printf("%s\t", list->host.ip);
printf("%s\t", list->host.stat);
printf("%s\t\n", list->host.lastonline);*/
printhost(&(list->host));
list = list->next;
};
//printf("%s\n", shift("SergeyB"));
/*
free(begin);
free(last);
free(list);
*/
list = begin;
while(list)
{
last = list;
list = list->next;
free((*last).host.ip);
free(last);
};
};
---------------------------------