struct person {
char id[11];
char name[21];
char sex[7];
int age;
char phone[12];
};
void input_info (struct person *info[], int total_people) {
int counter;
for (counter=0; counter<total_people; counter++){
scanf("%s", &info[counter].id);
scanf("%[^\n]", &info[counter].name);
scanf("%s", &info[counter].sex);
scanf("%d", &info[counter].age);
scanf("%s", &info[counter].phone);
}
}
int main (void) {
struct person *person_info = malloc(sizeof(struct person)*3);
input_info(&person_info, 3);
free(person_info);
return 0;
}
新手,写一个简单的人物信息记录程序
我的思路是创建一个结构体,然后用malloc
申请人数x结构体大小的内存,用于存放人物信息,上面是我的代码(精简到了只涉及此问题以及编译器报错的部分)。
但是编译器给出了这样的错误提示:
person_infor_sys.c: In function 'input_info':
person_infor_sys.c:41:29: error: request for member 'id' in something not a structure or union
scanf("%s", &info[counter].id);
^
person_infor_sys.c:44:33: error: request for member 'name' in something not a structure or union
scanf("%[^\n]", &info[counter].name);
^
person_infor_sys.c:47:29: error: request for member 'sex' in something not a structure or union
scanf("%s", &info[counter].sex);
^
person_infor_sys.c:50:29: error: request for member 'age' in something not a structure or union
scanf("%d", &info[counter].age);
^
person_infor_sys.c:53:29: error: request for member 'phone' in something not a structure or union
scanf("%s", &info[counter].phone);
^
导致此问题的原因是什么?应该如何解决?
由或者说我这样使用malloc
来储存多个结构体的思路本来就是错误的?
更新:01-25-2016
我又将这个问题搬到了Stack Overflow上
你传进去的是个二阶指针, 要先解info得到一个一阶指针, 再用那个一阶指针计算
但是input_info反正不改变指针指向的, 其实不传二阶指针能省事很多: