5

Я использую VS2013. Вся программа C, а не C++.Использование назначенных инициализаторов для инициализации инициализатора массива 2D-символов в структуре испускает ошибку C2078 в VS2013

я могу инициализировать «массив строк», как это без каких-либо проблем:

char titles[4][80] = { "Dad", "Idiot", "Donut Lover", "Fewl" }; // OK! 

У меня есть структура объявлен как это:

typedef struct 
{ 
    char name[80]; 
    char titles[4][80]; 
} Dude; 

Когда я пытаюсь инициализировать-структуру, как это :

Dude homer = 
{ 
    .name = "Homer", 
    .titles = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

У меня ошибка «C2078: слишком много инициализаторов». Это из-за инициализации массива. Если я удалю строку .titles = { ..., ошибка исчезнет. Почему я получаю эту ошибку? Есть ли другой способ выполнить инициализацию этого типа в инициализаторе структуры?

Если изменить декларацию структуры, чтобы посмотреть, как этот

typedef struct 
{ 
    char name[80]; 
    char *titles[4]; 
} Dude; 

ошибка уходит. Это, однако, не изменение, которое я могу сделать. Другие части базы кода требуют, чтобы размер этой структуры составлял ровно 400 байт.

Кроме того, я вполне знаю, что я мог бы использовать strcpy для заполнения каждого поля, но это не отвечает на мой вопрос.

+2

попробовать 'Dude Гомер = { "Гомер" , {«Папа», «Идиот», «Пончик-любовник», «Fewl»} }; ' – BLUEPIXY

+2

AFAIK, VS2013 использует C89 и C89, не поддерживает использование' {.item = ...} '. (Разве нет имени для этого?). GCC дает 'предупреждение: ISO C90 запрещает указывать подобъект для инициализации [-Wpedantic]', который показывает, что он не поддерживается на C89. –

+0

Я использую кодовые блоки для компиляции, и это нормально. Я думаю, это проблема VS .. Я обновил ваш вопрос, чтобы включить теги 'VS' и' VS2013' – Ian

ответ

0

В C, это легче сделать это:

Dude homer = 
{ 
    "Homer", 
    { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
}; 

Не знаю, если это работает, но вы можете попробовать:

Dude homer = 
{ 
    .name = "Homer", 
    .titles[] = { "Dad", "Idiot", "Donut Lover", "Fewl" } // error? 
};