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

How to initialize structure having unint_t as flexible array member?

我定义了一个struct,有一个one-member类型是uint8_t,这个member store mac address.

在 Arduino 上编程 IDE。

结构:

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

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

Method 1 > struct_devInfo slave = {{0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6}, 0, 0};

Method 2 > slave.address[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6};

如何访问这种类型的值?

我会用到这个结构的变量, 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;

那你就不用分配内存了