如何scanf到动态分配的struct int

时间:2016-11-12 18:51:48

标签: c struct

我有一个像这样定义的结构:

typedef struct { 
    char* name;
    int* phone;
} person;

分配如下:

person* Person[numNames];
    for (i =0; i<numNames; i++) { 
        Person[i] = malloc(sizeof(person));
        Person[i]->name = malloc(25 * sizeof(char));
        Person[i]->phone = malloc(sizeof(int));
        memset(Person[i]->phone, 0, sizeof(int));
    }

将输入读入这样的手机:

  for (i=0; i<numNames; i++) {
    printf("%s: ", Person[i]->name);
    scanf("%d", &Person[i]->phone);
  }

这给我一个分段错误:(还释放Person [i] - &gt;手机给我分段错误)

 for (i =0; i<numNames; i++) { 
    printf("%s: %d", Person[i]->name, *Person[i]->phone);
  }

如何在没有分段错误的情况下正确扫描到Person [i] - &gt;手机?

1 个答案:

答案 0 :(得分:0)

scanf requires you to pass a pointer to the "target" memory locations.你现在正在指针指针:

scanf("%d", &Person[i]->phone);

...但Person[i]->phone已经是int*,指向适合一个int的内存位置。以下调用将正确填充phone字段。

scanf("%d", Person[i]->phone);