打印struct的数组结构

时间:2018-02-19 16:57:51

标签: c struct

我有一个在另一个结构中的数组结构,但我不知道如何在函数中打印子结构的值。

主结构类似于:

 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); 

1 个答案:

答案 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。