我正在(再次..)正在努力进行C编码项目。
[请帮助我了解如何通过也动态分配的2D数组访问动态分配的变量。每次尝试都以失败告终,我找不到正确的语法...
[尝试:在分配给** list的新Family中将字符串放入family_name指针中。
scanf(" %s",&lod->list[0]->family_name);
程序:
#define _CRT_SECURE_NO_WARNINGS
//Libraries
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//Consts, globals, structs
#define MAX 10000
typedef struct person
{
char *name;
int gender; //1-female, 0-male
} Person;
typedef struct family
{
char *family_name;
Person *mother, *father; // parents' names
Person **children_list; // list of the children in this family
unsigned child_list_size; // size of child_list array
unsigned current_listChild_size;
} Family;
typedef struct listFamilys
{
Family **list;
unsigned current_listFamily_size; // current size of family
}
ListFamilys;
//main
void main()
{
ListFamilys *lod = (ListFamilys*) malloc(sizeof(ListFamilys));
if(! lod) exit(0);
lod->current_listFamily_size =0;
lod->list = (Family**)malloc(sizeof(Family*));
if (!lod->list) exit(0);
printf("Enter family name: ");
**scanf(" %s",&lod->list[0]->family_name);**
system("pause");
}
lod->list = (Family**) malloc(sizeof(Family*));
lod->list[0] = (Family*) malloc(sizeof(Family));
lod->list[0]->family_name = (char*) calloc(11, 1);
您只在其中做第一行的地方。我在这里对calloc
的用法有些随意,限制为10个字符。您可以根据需要进行修改。
但是,虽然这是启动和运行单个元素的最简单方法,但是由于必须进行多少分配,这种方法在大范围内崩溃了,并且由于要进行多少个单独的分配,释放内存成为噩梦使用这种方法。因此,最好将名称的4kb空间分配给单独的指针,然后将人员和家庭的名称字段指向相关名称,而不是为每个名称分别分配。其余部分如此。本质上,请尝试提取分配,而不要像上面的代码那样逐个字段地向下分配。