Как мне назначить массив для набора GtkWidget * в C? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть массив имен меток FlagEnt [NFLAGS], и я хочу назначить GtkWidget * для массива флиртов [NFLAGS]. Я пытался сделать это так:

  for (i = 0; i < NFLAGS; i++)
    flentry[i] = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[i]));

Это не сработало, и я получил:

(gdb) p flentry
$1 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}

, а не массив указателей, которые я ожидал, поэтому я посмотрел на то, как должен выглядеть фленри:

(gdb) p &flentry
$3 = (GtkWidget *(*)[8]) 0x5555557cdb60 <flentry>

Я заметил дополнительный * в определении; это должно быть из-за того, что я объявил flentry как:

static GtkWidget *   flentry[NFLAGS];

ie как массив. Я проверил эту гипотезу с:

static GtkWidget * tflentry
tflentry = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[0]));
(gdb) p tflentry
$1 = 0x555555aa1d60
(gdb) p *tflentry
$2 = {parent_instance = {g_type_instance = {g_class = 0x5555558e9110}, ref_count = 1, qdata = 0x555555aabdf0}, priv = 0x555555aa1c70}

И, Эй, Престо! Tflentry подходит как правильный указатель. Проблемы с массивом, то есть. Затем я попытался напрямую назначить элемент массива указателю, который, как я знал, работал:

static GtkWidget * tflentry
tflentry = GTK_WIDGET(gtk_builder_get_object(builder, FlagEnt[0]));
flentry[0] = tflentry;

(gdb) p tflentry
$2 = 0x555555ab2a00

(gdb) p flentry[0]
$8 = 0x0

Я не знаю, как назначить указатель tflentry для массива flentry [].

Кто-нибудь может дать мне подсказку? :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...