gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:25:52 28 4
gpt4 key购买 nike

为什么delwin导致第二个 initscr什么都不回?我以为endwin将重置为调用 initscr 之前的状态.

use NCurses;

my $win = initscr();
addstr( 'AAA' );
nc_refresh();
sleep 2;
delwin( $win );
endwin();

...

my $new_win = initscr();
if ! $new_win.defined {
endwin();
dd $new_win; # NCurses::WINDOW $new_win = NCurses::WINDOW
die "win undefined"; # win undefined
}
addstr( 'BBB' );
nc_refresh();
sleep 2;
delwin( $new_win );
endwin;

最佳答案

实际发生的是initscr返回 stdscr (标准窗口)。 delwin删除了它(并且指针是 SCREEN 结构的一部分,该结构已适当更新),因此随后调用 initscr (没有创建新的 屏幕 newterm )将返回 NULL 指针。原则上,申请可以引用 curscr newscr (在初始化期间创建的另外两个窗口),但 Perl 界面可能会忽略这些。

但是,它有助于阅读文档。引用 Differences initscr的部分手册页:

Differences

X/Open specifies that portable applications must not call initscr more than once:

  • The portable way to use initscr is once only, using refresh (see curs_refresh(3x)) to restore the screen after endwin.

  • This implementation allows using initscr after endwin.

Old versions of curses, e.g., BSD 4.4, may have returned a null pointer from initscr when an error is detected, rather than exiting. It is safe but redundant to check the return value of initscr in XSI Curses.

关于ncurses - 为什么在 delwin() 之后的 initscr() 返回 undef?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45008736/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com