В массиве C элементы массива должны иметь фиксированный размер, поэтому char *theNames[]
недопустимо.Также вы не можете инициализировать структуру таким образом.В Си массивы являются статическими, то есть нельзя динамически изменять их размер.
Правильное объявление структуры будет выглядеть следующим образом
struct potNumber{
int array[20];
char theName[10][20];
};
, и вы инициализируете его следующим образом:
struct potNumber aPot[3]=
{
/* 0 */
{
{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 /* up to 20 integer values*/ },
{"Half-and-Half", "Almond", "Raspberry", "Vanilla", /* up to 10 strings of max. 20 characters */ }
},
/* 1 */
{
{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 /* up to 20 integer values*/ },
{"Half-and-Half", "Almond", "Raspberry", "Vanilla", /* up to 10 strings of max. 20 characters */ }
},
/* 2 */
{
{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 /* up to 20 integer values*/ },
{"Half-and-Half", "Almond", "Raspberry", "Vanilla", /* up to 10 strings of max. 20 characters */ }
}
};
Но я уверен, что это не то, что вы хотите.Разумный способ сделать это потребовал некоторого стандартного кода:
struct IntArray
{
size_t elements;
int *data;
};
struct String
{
size_t length;
char *data;
};
struct StringArray
{
size_t elements;
struct String *data;
};
/* functions for convenient allocation, element access and copying of Arrays and Strings */
struct potNumber
{
struct IntArray array;
struct StringArray theNames;
};
Лично я настоятельно рекомендую не использовать голые массивы Си.Делая все через вспомогательные структуры и функции, вы освобождаетесь от недостатка / переполнения буфера и других проблем.Каждый серьезный C-кодер создает со временем подобную библиотеку с финансовыми кодами.