Необъявленный идентификатор при передаче структуры с помощью указателей

У меня есть следующий метод для чтения файла в структуру, но программа бомбит, когда она переходит к методу записи файла, поскольку переменная curr пуста.

Я добавил нулевую проверку, когда переменные токенизированы, но в этот момент она не выдает ошибку. Я предполагаю, что это как-то связано с тем, как я скопировал данные в newContact, но я не вижу, где я ошибаюсь.

Это упомянутый метод, который считывает в файле маркеры переменных и добавляет newContact:

struct contact *readFile(char * FName,struct contact** ptrList)
{    
    struct contact *head, *newContact;
    FILE *fptr;
    char oneLine[60];
    char *sname, *fname, *phone,*company, *email;

    head = *ptrList;

    fptr = fopen(FName,"r");

    if(fptr == NULL)
    {
        printf("\nCant open file!");
        return(ptrList);    
    }
    fgets(oneLine, 55, fptr);
    while(!feof(fptr))
    {
        fgets(oneLine, 55, fptr);
        if(oneLine[strlen(oneLine)-1] == '\n')
        {
            oneLine[strlen(oneLine)-1] = '\0';    
        }

        // open file and other stuff
        if(!ptrList) return; // invalid pointer
        for(head=*ptrList;head&&head->next;head=head->next);
        while( ReadLine(fptr,oneLine) )
        {
            //check that variables aren't empty here:
            if(sname == NULL || fname == NULL)
            {
                printf("\nvariable empty!");
                //return(ptrList);
            }
            sname = strtok(oneLine,",");
            fname = strtok(NULL,",");
            phone = strtok(NULL,",");
            company = strtok(NULL,",");
            email = strtok(NULL,",");

            newContact = (struct contact *)malloc(sizeof(struct contact));
            if(!newContact) break; // out of memory
            newContact->prev = head;
            newContact->next = 0;

            //copy the data to the new one
            strcpy(newContact->sname,sname);
            strcpy(newContact->fname,fname);
            strcpy(newContact->phone,phone);
            strcpy(newContact->company,company);
            strcpy(newContact->email,email);

            head = newContact;
            if(!*ptrList) *ptrList = head; // see: point 2
        }
    }

Это объявление struct:

struct contact {
    char sname[15];
    char fname[15];
    char phone[15];
    char company[15];
    char email[15];
    struct contact *prev;
    struct contact *next;
};

Я также получаю неопределенную ошибку здесь, в ReadLine. Есть ли библиотека, которую я должен импортировать для этой функции (поскольку я не вижу упоминаний в поиске)?

while( ReadLine(fptr,oneLine) )

Новая ошибка возникает здесь:

head = *ptrList;

Есть идеи, почему бомбит?


person Community    schedule 24.04.2013    source источник
comment
ReadLine не определен и не объявлен.   -  person BLUEPIXY    schedule 24.04.2013
comment
Да, но есть ли функция импорта для ReadLine?   -  person    schedule 24.04.2013
comment
Было бы неплохо показать код, в котором происходит сбой.   -  person alk    schedule 24.04.2013
comment
гну читаллайн? Хотя случай будет другой, readline vs ReadLine   -  person Adrian Panasiuk    schedule 24.04.2013
comment
И служит другой цели. Почему ReadLine, вы уверены, что не путаете это с функцией из какого-то другого языка?   -  person Adrian Panasiuk    schedule 24.04.2013


Ответы (1)


head = newContact;
if(!*ptrList) *ptrList = head; // see: point 2

По-моему, вы уже в конце списка. Я не вижу необходимости в этом утверждении «если». Мы никогда не меняем фактическую «голову» списка, и именно на нее указывает «ptrList».

Кроме того, разве вы не хотите, чтобы приведенный ниже цикл for был вне первого цикла while? Код пытается прочитать из файла и добавить в конец списка. Я не вижу необходимости проходить цикл для каждой строки файла.

 for(head=*ptrList;head&&head->next;head=head->next);
person Supriya K    schedule 06.06.2013