C массив структур со строкой - манипулирование / доступ - PullRequest
5 голосов
/ 21 декабря 2010

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

struct table_elt
{
    int id;
    char name[];
}

struct table_elt map[] =
{
    {123,"elementt1"},
    {234,"elt2"},
    {345,"elt3"}
};

Я пытаюсь получить доступ к этим элементам через map [1] .name и т. Д. Однако, похоже, он неполучить элементы правильно, и я получаю случайный мусор.Я думаю, что это потому, что компилятор не знает, где элементы приземляются из-за изменения.Каков наилучший способ исправить это, при этом сохраняя максимальную гибкость и простоту?

Ответы [ 2 ]

8 голосов
/ 21 декабря 2010

Вы, вероятно, хотите:

struct table_elt
{
    int id;
    const char *name;
}

struct table_elt map[] =
{
    {123,"elementt1"},
    {234,"elt2"},
    {345,"elt3"}
};

Что касается примечания, table_elt даже не нужно имя, если оно используется только в этом контексте.

1 голос
/ 21 декабря 2010

Вы не можете иметь массив неопределенной длины внутри структуры table_elt.Вы можете изменить его на char * и указать его на массиве char, размещенном в другом месте, или выбрать подходящую длину для вашего массива и включить ее в определение структуры:

struct table_elt
{
    int id;
    char name[15];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...