【发布时间】:2014-03-13 18:12:50
【问题描述】:
输入文件:
JOHN 9999999999
MEENA 9888888888
RIA 8718218218
SONIA 7777777777
FINCH 1234567890
我想通过将文件的内容附加到列表中来创建一个循环链表。我创建了一个带有“NO VALUE”条目的哨兵。
-
当我在 gdb 中测试我的代码时,uploadAddresses() 中 while 循环结束时的 p->next->name 显示 Finch。这怎么可能?p 值保持不变,只有 temp 值在每次迭代后发生变化。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXPHONENO 100 //Variables declaration struct Contact { char *name; char *mobileno; struct Contact *next; }; typedef struct Contact Contact; typedef Contact* PHBOOK; //Function declaration PHBOOK createAddressBook(); PHBOOK uploadAddresses(PHBOOK pb,char *name); //Implementation PHBOOK createAddressBook(){ PHBOOK pb = (PHBOOK)malloc(sizeof(Contact)); pb->name = "NO ENTRY"; pb->mobileno = "NO ENTRY"; pb->next = pb; return pb; } PHBOOK uploadAddresses(PHBOOK p,char *fname){ PHBOOK temp = p; char mob[20],name[20]; FILE *fp = fopen(fname,"r"); while(fscanf(fp,"%s %s",name,mob)!=EOF){ temp->next = (PHBOOK)malloc(sizeof(Contact)); temp = temp->next; temp->name = name; temp->mobileno = mob; printf("%s %s\n",name,mob); } temp->next = p; return p; } int main(){ PHBOOK pb = createAddressBook(); pb = uploadAddresses(pb,"/home/user/names_mobile"); return 0; }
【问题讨论】:
-
函数
createAddressBook的代码在哪里? -
我已经发布了 createAddressBook() 的代码
-
如果你想要一个循环链表,为什么你只指向下一项而不是前一项?此外,为了定义列表的最后一个元素,指向下一个元素的指针被定义为
null,而不是自身。