Массив структур - размер возвращаемого неожиданного результата

У меня есть массив простых структур, объявленных в моем коде. sizeof() возвращается ответ, который не соответствует размеру массива. Есть ли другой способ объявить это, чтобы обеспечить правильный размер ответа?

struct control_cmd {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
};

struct control_cmd control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

sizeof(control_cmds) возвращает значение 16 когда я ожидаю значение 2,

В чем дело?

2 ответа

Решение

sizeof это размер в памяти, а не количество элементов. В случае массива (не указателя!) Вы можете получить количество элементов, разделив размер массива на размер одного элемента, т.е. sizeof(control_cmds) / sizeof(*control_cmds),

Я бы напечатал control_cmd_tобъявить control_cmds как массив control_cmd_tи разделить два. (Очень похоже на ответ Арку).

#include <stdio.h>

typedef struct control_cmd_t__ {
    const char * cmd;
    void (*cmd_fn)(int,char *(*)[],char*);
} control_cmd_t;

control_cmd_t control_cmds[]={
    {"ANNOUNCE",control_announce},
    {"SEND",control_send}
};

int main()
{
    printf("sizeof control_cmd_t is: %ld\n", sizeof(control_cmd_t));
    printf("sizeof control_cmds is: %ld\n", sizeof(control_cmds));
    printf("number of elements in control_cmds is: %d", (sizeof(control_cmds)/sizeof(control_cmd_t)));

    return 0;
}

Выход:

sizeof control_cmd_t is: 16
sizeof control_cmds is: 32
number of elements in control_cmds is: 2
Другие вопросы по тегам