在循环中执行initscr()会导致错误初始化

我正在尝试制作一个简单的ncurses程序来显示带有消息的框。 我遵循这个链接 ,它运作良好。 我遇到的问题是,如果我将整个代码放在一个函数中并在循环中调用它,那么初始化就会出错。 据我所知,如果我在函数末尾调用endwin() ,那么再次调用initscr()应该没有任何问题。 我是否缺少一个能够再次调用initscr()的函数?

这是代码:

 #include  #include  #include  #include  int call() { WINDOW *mainwin, *childwin; int ch; if ((mainwin = initscr()) == NULL) { fprintf(stderr, "Error initialising ncurses.\n"); exit(EXIT_FAILURE); } noecho(); curs_set(FALSE); keypad(mainwin, TRUE); mvaddstr(childwin, 1, 6, "Warning! Press q to exit"); mvaddstr(childwin, 2, 15, "{ OK }"); refresh(); while( (ch = getch()) != 'q') { refresh(); } delwin(mainwin); endwin(); refresh(); return EXIT_SUCCESS; } int main() { int i; for (i=0;i<10;i++) { call(); } return 0; } 

编辑:我已经把头文件。 将代码更改为更简单

示例程序不会initscr调用initscr 。 但是,它也没有显示#include行(编译所必需的),所以也许它不是实际运行的程序。

关于调用initscr (一次或多次)的问题,至少有两种可能性:

  • 你正在使用一些其他的curses实现(例如,像HPUX这样的Unix)。 如X / Open所述 , 便携式程序不得多次调用initscr
  • TERM变量未设置为可用值。 像往常一样, 手册页解释了该function的作用以及它可能失败的原因。