У меня следующая структура
typedef struct _person {
int age;
char sex;
char name[];
}person;
Я провел базовый поиск в Интернете (но безуспешно) о том, как создать экземпляр и инициализировать структуру с помощью гибкого элемента массива без использования malloc()
.
Например: для обычных структур, таких как
struct a {
int age;
int sex;
};
Мы можем создать экземпляр struct a
и инициализировать его как
struct a p1 = {10, 'm'};
Но для структур с гибким массивом в нем (например, _person
, как упоминалось выше), как мы можем создать экземпляр и инициализировать, как мы делаем это для обычного structures
?
Это вообще возможно? Если да, то как передать размер массива во время инициализации и фактическое значение, которое нужно инициализировать?
(or)
Верно ли, что единственный способ создать структуру с гибким массивом - это использовать malloc()
, как указано в спецификации C99 - 6.7.2.1 Structure and union specifiers - point #17
?!
struct { size_t len; int data[]; } x = { 4, { 1, 2, 3, 4 } };
, и оно будет работать, но оно не переносимо. Вы всегда можете изучить версиюalloca
для вашей платформы в поисках, возможно, более переносимого решения, но вам нужно будет убедиться, что все они ведут себя одинаково и имеют одинаковые особенности реализации. - person Chris Lutz   schedule 31.12.2011-ansi
или что-нибудь, что могло бы его отключить). - person Chris Lutz   schedule 31.12.2011