printw,ncurses有问题

时间:2013-11-17 17:28:08

标签: c ncurses

我需要使用printw();但它不起作用,它只是段错误。 我使用了initscrendwin,但它没有改变任何内容。

void    aff_battel(char **str)
{
  int   i;
  int   j;
  char  *str2;

  if ((str2 = malloc(sizeof(*str) * 23)) == NULL)
    return ;
  str2 = "---------------------\n\0";
  j = 0;
  i = 0;
  while (str[i] != NULL)
    {
      initscr();
      printw("---------------------\n\0"); /* it doesn't work */
      printw("%s", str2); /* here nether */
      endwin();
      i++;
    }
}

知道我已经将initsrc();放在开头并且结束了循环结束但它仍然没有打印任何东西

void    aff_battel(char **str)
{
  int   i;
  int   j;

  j = 0;
  i = 0;
  while (str[i] != NULL)
    {
      printw("---------------------\n");
      i++;
    }
  endwin();
}

1 个答案:

答案 0 :(得分:0)

正如Joachim Pileborg所说,在评论中,initscr()应该在您的计划开始时,endwin()在最后。

initscr()设置内部屏幕字符映射,printw()将写入该字符映射。

要将屏幕地图复制到实际屏幕,您需要致电refresh()。没有它,你什么也看不见。

endwin()清除屏幕并将终端重置为正常。

以下是使用简化函数演示ncurses函数的示例。我使用getch()让程序等待按键然后退出。

注意:在此示例中,它仍会显示没有refresh()的文本,因为getch()也会刷新。

#include <ncurses.h>

void    aff_battel(char **str)
{
  int   i;
  int   j;

  j = 0;
  i = 0;
  while (str[i] != NULL)
  {
      printw("---------------------\n");
      i++;
  }
  refresh();
}

void main(int argc, char **argv)
{
    initscr();
    aff_battel(argv);
    getch();
    endwin();
}