微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何初始化具有 unint_t 作为灵活数组成员的结构?

如何解决如何初始化具有 unint_t 作为灵活数组成员的结构?

我定义了一个struct,有一个成员类型是uint8_t,这个成员存储mac地址。

在 Arduino IDE 上编程。

结构:

typedef struct devInfo{
  uint8_t address[];
  unsigned int count;
  unsigned int filePos;
}struct_devInfo;
  • 问题 1:

我用这两种方式给值但不能给变量赋值。

方法一> struct_devInfo slave = {{0xA1,0xB2,0xC3,0xD4,0xE5,0xF6},0};

方法二> slave.address[] = {0xA1,0xF6};

如何访问这种类型的值?

  • 问题 2:

我将使用这个结构的变量, salve1、slave2...等

除了结构,还有什么更好的方法吗? 你能演示一下吗?

解决方法

具有灵活数组成员的结构需要是结构中的最后一个成员。改为

typedef struct devInfo{
  unsigned int count;
  unsigned int filePos;
  uint8_t address[];
}struct_devInfo;

那么你需要分配足够的内存:

struct_devInfo *p = malloc(sizeof *p + size);

然后你可以这样做:

const uint8_t initArr[] = {0xA1,0xB2,0xC3,0xD4,0xE5,0xF6};
memcpy(p,initArr,sizeof initArr);

但由于它似乎是一个不需要灵活成员的字段,我会改用它:

typedef struct devInfo{
  unsigned int count;
  unsigned int filePos;
  uint8_t address[6]; // Specify the size
}struct_devInfo;

那你就不用分配内存了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。