为什么在delwin()之后的initscr()返回undef?

时间:2017-07-10 09:44:31

标签: ncurses perl6

为什么td, th {text-align: center}导致第二个delwin没有返回任何内容?我认为initscr会在调用endwin之前重置为状态。

initscr

1 个答案:

答案 0 :(得分:4)

实际发生的是initscr返回 stdscr (标准窗口)。 delwin已将其删除(并且指针是 SCREEN 结构的一部分,该结构已正式更新),因此后续调用initscr(未创建新的屏幕 newterm)会返回 NULL 指针。原则上,应用程序可以引用 curscr newscr (在初始化期间创建的另外两个窗口),但Perl接口可能会忽略这些。 / p>

然而,阅读文档会有所帮助。引用initscr手册页的Differences部分:

  

<强>差异

     

X / Open指定便携式应用程序不得再调用 initscr          不止一次:

     
      
  • 使用 initscr 的便携式方式仅使用 refresh (请参阅          curs_refresh(3x))在endwin之后恢复屏幕。

  •   
  • 此实施允许在 initscr 之后使用 endwin

  •   
     

旧版本的curses(例如BSD 4.4)可能返回了空指针          检测到错误时从 initscr ,而不是退出。它是          在XSI Curses中检查 initscr 的返回值是安全但多余的。