C: массив struct (который содержит int и другой массив другой структуры)

#c #arrays #struct

#c #массивы #структура

Вопрос:

 struct dataStruct {     const char* s;     int num; }; 

struct Final_struct {     int n;     dataStruct a[]; }; 
  

Теперь проблема возникает, когда я пытаюсь инициализировать Final_struct следующим образом:

 const Final_struct Example[]= {
                                {100, { {"age", 20}, {"iq", 120}, {"bmi",26} } },
                                {100, { {"age", 36}, {"iq", 145}, {"bmi",22} }}
};
  

Это код на c, и когда я пытаюсь скомпилировать его, выдает ошибку компилятора :

Fields of the object can not have arrrays of size 0

Есть предложения?

Спасибо.

Комментарии:

1. Вы должны были получить тонны ошибок компилятора, а не только одну…

Ответ №1:

dataStruct a[] определяет элемент структуры как массив размера 0 . Это практически бесполезно. Вам нужно указать его размер в определении struct , потому что компилятору необходимо заранее знать размер всего struct массива.

Или вы можете просто объявить поле как dataStruct *a и тогда сам массив не будет содержаться в struct .

Ответ №2:

Если это C, то что это string ? Почему вы ожидаете, что сможете инициализировать его из того, что выглядит как другие переменные?

Попробуйте const char * для s и инициализируйте из строковых литералов, заключенных в кавычки.

Ответ №3:

вы забыли кавычки в своих строках?

«возраст»

Комментарии:

1. спасибо, что заметили, но проблема не в этом… Я допустил ошибку при написании примера. исправит это.

Ответ №4:

Вы пробовали заключать строковые константы в двойные кавычки?

Ответ №5:

Есть предложения?

Попробуйте:

 /* note the explicit array size for a[] */
struct Final_struct {     int n;     struct dataStruct a[3]; };
  

Комментарии:

1. Спасибо. Иногда я серьезно сомневаюсь в своих возможностях кодирования.

Ответ №6:

массив ‘a’, который объявлен внутри структуры с именем Final_struct, должен иметь размер. не зная размер этой переменной, компилятор не может назначить память для этой переменной. итак, сначала вы должны выделить размер…