У меня есть следующий метод для чтения файла в структуру, но программа бомбит, когда она переходит к методу записи файла, поскольку переменная 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;
Есть идеи, почему бомбит?
readline
vsReadLine
- person Adrian Panasiuk   schedule 24.04.2013ReadLine
, вы уверены, что не путаете это с функцией из какого-то другого языка? - person Adrian Panasiuk   schedule 24.04.2013