如何初始化具有 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;
- 问题 1:
我用这两种方式赋值,但不能给变量赋值。
Method 1 >
struct_devInfo slave = {{0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6}, 0, 0};
Method 2 >
slave.address[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 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;
那你就不用分配内存了
我定义了一个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;
- 问题 1:
我用这两种方式赋值,但不能给变量赋值。
Method 1 > struct_devInfo slave = {{0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6}, 0, 0};
Method 2 > slave.address[] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 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;
那你就不用分配内存了