c - 指针值改变

标签 c pointers semantics

输入文件:

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/

相关文章:

c - C 中 char* 类型元素的地址

c - 为什么具有负索引的数组有效?

c - Algol 和 C 在类型转换中的语义差异

c - iPhone 开发人员获取不同类中 C 数组的内容

c - P线程和信号

c - 指针指向指针的问题

python - 为什么 Django 使用元组进行设置而不是列表?

c - 在文本文件中查找关键字

c - 将带符号的正整数输入为无符号整数(反之亦然)

c - 指针的 memcpy 与赋值相同吗?