gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:17 25 4
gpt4 key购买 nike

我有以下方法将文件读入结构,但是,由于 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;

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

最佳答案

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

我相信,您已经排在列表的末尾了。我认为不需要这个“if”语句。我们永远不会更改列表的实际“头部”,这就是“ptrList”指向的位置。

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

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

关于c - 使用指针传递结构时未声明的标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189584/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com