c语言结构体按地址赋值,C语言 函数调用一个由malloc获得的指向多个结构体大小的首地址,如何给这个储存空间赋值?...

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是用C语言实现删除两个双向链表中相同结点的函数的示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node* prev; struct Node* next; } Node; Node* createNode(int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->prev = NULL; newNode->next = NULL; return newNode; } void deleteNode(Node* node) { if (node == NULL) { return; } if (node->prev != NULL) { node->prev->next = node->next; } if (node->next != NULL) { node->next->prev = node->prev; } free(node); } void deleteCommonNodes(Node* list1, Node* list2) { Node* p = list1; while (p != NULL) { Node* q = list2; while (q != NULL) { if (p->data == q->data) { deleteNode(p); deleteNode(q); break; } q = q->next; } p = p->next; } } int main() { Node* list1 = createNode(1); list1->next = createNode(2); list1->next->prev = list1; list1->next->next = createNode(3); list1->next->next->prev = list1->next; Node* list2 = createNode(2); list2->next = createNode(3); list2->next->prev = list2; deleteCommonNodes(list1, list2); Node* p = list1; while (p != NULL) { printf("%d ", p->data); p = p->next; } printf("\n"); Node* q = list2; while (q != NULL) { printf("%d ", q->data); q = q->next; } printf("\n"); return 0; } ``` 在此示例代码中,我们定义了一个 `Node` 结构体表示链表的结点,其中包括数据、前驱结点和后继结点三个成员变量。我们还定义了 `createNode` 函数用于创建链表结点,以及 `deleteNode` 函数用于删除某个结点。 在 `deleteCommonNodes` 函数中,我们对两个链表中的每一个结点进行比较,如果它们的数据相同,则删除它们。在删除结点时,我们调用 `deleteNode` 函数删除结点,并将该结点的前驱结点和后继结点进行连接。 在 `main` 函数中,我们创建了两个双向链表并分别赋值,然后调用 `deleteCommonNodes` 函数删除它们的相同结点。最后,我们遍历两个链表并输出它们的值,以检查删除操作是否成功。 需要注意的是,此示例代码仅适用于数据类型为整数的链表。若要支持其他数据类型,需要相应地修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值