Массив структур - размер возвращаемого неожиданного результата
У меня есть массив простых структур, объявленных в моем коде. 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