输入文件:
JOHN 9999999999
MEENA 9888888888
RIA 8718218218
SONIA 7777777777
FINCH 1234567890
我想通过将文件内容追加到列表中来创建一个循环链表。我创建了一个带有“NO VALUE”条目的哨兵。
当我在 gdb 中测试我的代码时,在 uploadAddresses() 中 while 循环结束时的 p->next->name 显示 Finch。这怎么可能?p 值保持不变,只有临时值在之后发生变化每次迭代。
#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; }
最佳答案
改变:
temp->name = name;
temp->mobileno = mob;
收件人:
temp->name = malloc(strlen(name)+1);
temp->mobileno = malloc(strlen(mob)+1);
strcpy(temp->name,name);
strcpy(temp->mobileno,mob);
关于c - 指针值改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21778424/