c-使用指针传递结构时未声明的标识符



我有以下方法将文件读取到结构中,但是,由于curr变量为空,当程序到达写文件方法时,程序正在轰炸。

当变量被标记化时,我添加了一个null检查,但在这一点上不会抛出错误。我猜这与我将数据复制到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] = '';    
        }
        // 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;

有什么关于它为什么爆炸的想法吗?

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

我相信,你已经在名单的末尾了。我认为没有必要发表这种"如果"的声明。我们从不更改列表的实际"头",这就是"ptrList"所指向的位置。

另外,你不想在第一个while循环之外使用下面的for循环吗?该代码正试图从文件中读取并添加到列表的末尾。我认为没有必要遍历文件的每一行的循环。

 for(head=*ptrList;head&&head->next;head=head->next);

相关内容

  • 没有找到相关文章

最新更新