首页 > 解决方案 > ncurses 表单未分配:未知错误

问题描述

我正在使用 ncurses 在窗口中生成一个表单,但没有分配表单,通过使用 assert 我确认了这一点,但我不知道发生这种情况的原因,并且当我使用 perror 时它显示unknown error

这是代码..

#include <ncurses.h>
#include <stdio.h>
#include <form.h>
#include <assert.h>

WINDOW *win_des;
FORM *form;
FIELD *fields[3];

void init_form()
{
    ui.if_form =1;
    // allocate fields , odd: fixed , even: editable...
    fields[0] = new_field(1, 10, 0, 0, 0, 0);
    fields[1] = new_field(1, 20, 0, 15, 0, 0);
    fields[2] = NULL;
    assert(fields[0] != NULL && fields[1] != NULL  );
    set_field_buffer(fields[0], 0, "label1");
    set_field_buffer(fields[1], 0, "val1");
    set_field_opts(fields[0], O_VISIBLE | O_PUBLIC | O_AUTOSKIP);
    set_field_opts(fields[1], O_VISIBLE | O_PUBLIC | O_EDIT | O_ACTIVE);
    set_field_back(fields[1], A_REVERSE|A_BOLD);
    form = new_form(fields);

    keypad(win_des, true);
    form = new_form(fields);

    assert(form !=NULL);
    set_form_win(form, win_des);
    set_form_sub(form, derwin(win_des, 20, 100, 1, 1));
    post_form(form);

    refresh();
    wrefresh(win_des);

}

int main(void)
{
win_des = newwin(LINES, COLS, 0, 0);
box(win_des,0,0);
refresh();
wrefresh(win_des);
init_form();
return 0;
}

这不起作用,我正在根据此处的示例尝试此代码。我知道我还必须制作表单驱动程序,通过它我将移动光标,但最初它不是打印字段,因此会崩溃。

编译 gcc my_form.c -lncurses -lform -o myform

标签: cformsncurses

解决方案


我认为你有两个问题:

  1. 你似乎没有打电话initscr()。你应该在任何其他诅咒例程之前调用它main
  2. 你打new_form了两次电话。删除第二个调用。

推荐阅读