问题描述
我正在使用 ncurses 在窗口中生成表单,但未分配表单,通过使用 assert 我确认了这一点,但我不知道发生这种情况的原因,而且当我使用 perror 时,它显示 { {1}}。
这是代码..
unkNown error
这不起作用,我正在基于此示例 here 尝试此代码。 我知道我还必须制作表单驱动程序,通过它我将移动光标,但最初它没有打印字段,因此会崩溃。
使用 #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);
fields[1] = new_field(1,20,15,0);
fields[2] = NULL;
assert(fields[0] != NULL && fields[1] != NULL );
set_field_buffer(fields[0],"label1");
set_field_buffer(fields[1],"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,100,1,1));
post_form(form);
refresh();
wrefresh(win_des);
}
int main(void)
{
win_des = newwin(LInes,COLS,0);
Box(win_des,0);
refresh();
wrefresh(win_des);
init_form();
return 0;
}
编译
解决方法
我认为您有两个问题:
- 您似乎没有在呼叫
initscr()
。您应该在main
中的任何其他诅咒例程之前调用它
- 您拨打了两次
new_form
。删除第二个调用。