Как получить правильный размер структуры const, содержащей массив const в C - PullRequest
0 голосов
/ 30 марта 2020

Я получаю неправильный размер структуры, содержащей массив 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.

...