Я получаю неправильный размер структуры, содержащей массив const char.
Пример (код Arduino):
#include <Streaming.h>
struct my_struct_t {
uint8_t len;
const char str[];
};
// Macro to init struct from string
#define MAKE_STRUCT(s) { .len = sizeof(s), {.str = s} }
#define my_str "30-03-2020"
const struct my_struct_t my_struct = MAKE_STRUCT(my_str);
struct my_struct2_t {
uint8_t index;
uint8_t size;
};
const my_struct2_t my_struct2 = {0, sizeof(my_struct)};
void setup() {
// put your setup code here, to run once:
while(!Serial); delay(10);
Serial << ("sizeof(my_str) = ") << sizeof(my_str) << endl;
Serial << ("my_struct.len = ") << my_struct.len << endl;
Serial << ("sizeof(my_struct) = ") << sizeof(my_struct) << endl;
Serial << ("my_struct2.size = ") << (my_struct2.size) << endl;
}
void loop() {
}
Значения, напечатанные в последовательном окне:
sizeof(my_str) = 11
my_struct.len = 11
sizeof(my_struct) = 1
my_struct2.size = 1
Проблема в том, что размер my_struct указан неверно (ожидается 1 + 11 = 12), и таким образом my_struct2 будет инициализироваться с неправильным значением.
Что я делаю неправильно?
Как мне получить правильное значение размера my_struct
для использования в my_struct2
?
РЕДАКТИРОВАТЬ
Просто хочу упомянуть, что my_struct
правильно размещен во флаге sh.