gpt4 book ai didi

链表的C函数不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:35 24 4
gpt4 key购买 nike

我有一个函数,可以从用户那里获取一些数据,使用它们创建一个结构并将该结构添加到链表中。但它不会将数据保存到链表中:

typedef struct contact Contact;
typedef Contact *ContactPtr;
int main(){
ContactPtr starPtr;
addContact(starPtr);
printf("## %s", starPtr->firstName);
return 0;
}
void addContact(ContactPtr sPtr){
printf("\n FF:\n");
ContactPtr newPtr;
ContactPtr prevPtr;
ContactPtr currentPtr;
newPtr = malloc(sizeof(Contact));
char fN[20];
char sN[20];
char phN[12];
scanf("%s", &fN);
scanf("%s", &sN);
scanf("%s", &phN);

if (newPtr!=NULL){
strcpy(newPtr->firstName, fN);
strcpy(newPtr->surName, sN);
strcpy(newPtr->phoneNo, phN);


newPtr->next=NULL;
prevPtr = NULL;
currentPtr=sPtr;

while(currentPtr!=NULL){

prevPtr=currentPtr;
currentPtr=currentPtr->next;
}

if(prevPtr==NULL){
printf("!!@");
newPtr->next=sPtr;
sPtr=newPtr;
}
else{
prevPtr->next=newPtr;
newPtr->next=currentPtr;
}
}
else{
printf("$$WRONG");
}
}

程序为 starPtr->firstName 返回 null。这是函数还是链表的问题?它是否指向正确的值?

最佳答案

main 中,您有:

ContactPtr starPtr;
addContact(starPtr);

addContact定义为:

void addContact(ContactPtr sPtr){

addContact 无法修改 startPtr,这就是为什么它从不指向任何有用的东西。

如果是 C++,您可以将代码更改为:

void addContact(ContactPtr& sPtr){

这样,您就可以传递对 startPtr 的引用,并且可以在 addContact 中对其进行修改。

但是如果是C的话,就得用一个指向指针的指针,像

void addContact(ContactPtr* sPtr){

addContact 中,将 sPtr 替换为 *sPtr

像这样更改 main:

addContact(&starPtr);

关于链表的C函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657006/

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