ошибка при инициализации массива структур - PullRequest
0 голосов
/ 03 марта 2019

У меня есть моя структура, как показано ниже, может быть n чисел vendor, которые могут содержать n чисел test struct.Я пытаюсь инициализировать эту структуру.Это пример кода, который я пытаюсь, позже я хочу сделать это с помощью макросов и загрузить структуру, как X-макросы.

Я также использую концепцию гибкой структуры, поскольку я не знаю, сколько будет тестовых структур для вендора.Данные будут в файле, структура должна загрузить все, что есть.Я создал минимальный пример кода для SO.Ниже мой код.

#include <stdio.h>

typedef struct test{
int a;
int b;
int c;
}test;

typedef struct vendor{
int size;
test t[0];
}vendor;

vendor v[]={

{.size = 1, .t[] = {{1,2,3},}}
};

int main()
{
return 0;
}

Я получаю эту ошибку -

a.c:16: error: expected expression before ‘]’ token
a.c:16: error: array index in initializer not of integer type
a.c:16: error: (near initialization for ‘v[0].t’)
a.c:16: error: extra brace group at end of initializer
a.c:16: error: (near initialization for ‘v[0]’)
a.c:16: error: extra brace group at end of initializer
a.c:16: error: (near initialization for ‘v[0]’)
a.c:16: warning: excess elements in struct initializer
a.c:16: warning: (near initialization for ‘v[0]’)

Я пробовал без гибкой структуры, но пока не повезло.какие-либо предложения о том, как начать эту структуру?

1 Ответ

0 голосов
/ 03 марта 2019

Синтаксис .t[]= в инициализаторе недействителен.При использовании назначенного инициализатора вам нужно только указать имя члена:

.t={1, 2, 3}

Однако это не будет работать с элементом гибкого массива.

РазмерСтруктура с элементом гибкого массива не содержит места для элемента гибкого массива, поэтому вы не можете создать его статический или автоматический экземпляр.Необходимо выделить память для структуры динамически:

vendor *v;

void init()
{
    v = malloc(sizeof(vendor) + 1 * sizeof(test));
    v.size = 1;
    v.t = (test){1, 2, 3};
}

int main()
{
    init();
    return 0;
}

Кроме того, из-за размера переменной структура с гибким членом массива не может быть членом массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...