好吧,“显然”你需要先填写“struct Database”:
struct Database MyDatabase;
MyDatabase.data_rows=malloc(sizeof(MyDatabase.data_rows[0])*NumberOfPeople);
忽略我没有检查 malloc() 是否失败的事实,这将为您提供一个“struct Person”数组,所有这些都未初始化。所以,很可能,你会想要初始化它们:
int i;
for (i=0; i<NumberOfPeople; i++)
{
struct Person* MyPerson;
MyPerson=&MyDatabase.data_rows[i];
MyPerson->id=i;
MyPerson->name=malloc(...);
/* Do something to store the name in MyPerson->name */
MyPerson->place=malloc(...);
/* Do something to store the place in MyPerson->name */
}
现在,这里的问题是我放在 malloc 上的“...”。如果您使用固定大小很容易,但是您可以将您的结构声明为类似
struct Person
{
int id;
char name[100];
char place[200];
};
基本上,我只是不知道名称的长度应该是多少,因此我只是将其键入为“...”。
另外,我只是猜测“id”可能是什么。使用数组索引实际上有点毫无意义:-)
当然,您不必现在就全部完成。您可以只设置名称并将指针设置为 NULL 并稍后填写它们,例如当您从文件中读取数据时,或者您计划执行的任何操作时。或者,如果您确信您的代码始终“知道”哪些字段已初始化,哪些字段未初始化,则您可以根本不在这里初始化它。