我有一个在另一个结构中的数组结构,但我不知道如何在函数中打印子结构的值。
主结构类似于:
struct person{
char name[10];
int cash;
listMov mov[];
};
typedef person Person;
Person user[50];
和儿子结构
struct listaMovimenti{
int bonifico;
char beneficiario[10];
};
typedef struct listaMovimenti listMov;
listMov mov[2] = {{150, "Ponzi" },
{2000, "Gotti"}};
我尝试过这样的事情但没有成功。
printf("Name %s and %d",user[0].mov[1].beneficiario, user[0].mov[1].bonifico);
答案 0 :(得分:2)
第一:
变量listMov mov[2]
与结构内的listMov mov[];
无关。它们具有相同的名称,但范围不同。它们完全不相关。
第二
listMov mov[];
表示结构中有一个灵活的数组。在结构中使用灵活数组时,必须使用动态内存分配来保留所需的内存量。使用Person user[50];
是没有意义的,因为没有为灵活数组保留内存。
使用灵活阵列有点困难。在大多数情况下,使用像:
这样的指针会更容易struct person{
char name[10];
int cash;
listMov* mov;
};
typedef person Person;
Person user[50];
然后分配内存,如
user[0].mov = malloc(N * sizeof(listMov)); // N is thee number of elements needed
然后你可以这样做:
user[0].mov[0].bonifico = 150;
strcpy(user[0].mov[0].beneficiario, "Ponzi");
user[0].mov[1].bonifico = 200;
strcpy(user[0].mov[1].beneficiario, "Gotti");
printf("Name %s and %d",user[0].mov[1].beneficiario, user[0].mov[1].bonifico);
请记住,您需要为您使用的每个user[i]
添加一个新的malloc。