c - 打印结构的数组结构

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

最佳答案

首先:

变量 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。

关于c - 打印结构的数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870766/

相关文章:

在需要附加属性的文件描述符上使用轮询的规范方式

C - 转换 u16_array 中的结构,其中每个 uint16_t 仅代表一个字节

c - 将两个别名传递给 `typedef struct` 意味着什么?

c - printf 多个变量但中间没有逗号

将标准输入复制到缓冲区

c++ - 提取代码时出现奇怪的 OpenGL 问题

mysql - 在 MySQL 中创建结构

c - 使用 memcpy 和 void* 交换函数

c - 如何从 C 中的数字中提取特定位?

gotk3,带有自定义小部件的笔记本附加页面并将其取回