Скажем, у меня есть этот код:Размер гибкого элемента массива с брекет инициализацией
const struct
{
const char * const name;
const unsigned length;
const char data[951357];
} var[] =
{
{
"dataset1",
#include "dataset1.h"
},
{
"dataset2",
#include "dataset2.h"
},
/* ... */
};
Каждый dataset*.h
содержит что-то вроде:
6,
{
0x04, 0x08, 0x15, 0x16, 0x23, 0x42
}
Это требует, чтобы я заранее знать размер самого крупного набор данных. Это не соответствует будущему, поскольку любой, кто добавляет набор данных, также должен проверять и, возможно, изменять размер data
и может привести к серьезным потерям памяти (в моем реальном случае уже существует ~ 15 наборов данных с размерами в пределах сотни КБ).
Есть ли способ обойти это?
Единственное жесткое требование состоит в том, чтобы каждый данные должны быть в собственном файле, но формат этого файла может быть любым. Я также хотел бы сохранить все как можно const
.
Edit: я должен отметить, что старый код делает это:
struct dataset { char* name; int length; char* data; };
struct dataset *alldata[10];
struct dataset dataset1 = {
"dataset1",
#include "dataset1.h"
};
/* same again for every dataset */
int main()
{
alldata[0] = malloc(sizeof(struct dataset));
memcpy(alldata[0], dataset1, sizeof(struct dataset));
/* again, block copied for each dataset */
}
Этот код выглядит некрасиво со мной, и требует (я думаю) ненужные копии MEM. Моя цель при перезаписи этого кода заключалась в том, чтобы он хранил все данные во время компиляции, а затем читал их только при необходимости во время выполнения.
Должен ли массив быть внутри структуры? Достаточно ли указателя? – user694733
Обязательны ли все эти 'const' вокруг вашего определения' struct'? – LPs
'const char const * name;' похоже на ошибку. Возможно, вы имели в виду 'char const * const name;'? Кроме того, для массива требуется только один: 'char const data [951357];'. – user694733