当我将stdscr
变量传递给任何接收WINDOW*
参数的函数(例如,keypad
和wprintw
)时,我的 PDCurses 程序终止。但是当我捕获WINDOW*
返回的initscr
并使用它时它会起作用。
我假设一旦initscr
被调用,WINDOW*
它的返回值和stdscr
变量应该是相同的。但是在比较了他们的地址之后,我意识到事实并非如此。
我可以继续使用WINDOW*
返回的 by ,但这在一个必须使用返回 a而不是 ainitscr
的多终端程序中不起作用。在那种情况下,我必然需要使用仍然拒绝工作的变量。newterm
SCREEN*
WINDOW*
stdscr
这是一个有效的示例代码:
#include <curses.h>
int main()
{
WINDOW* wnd = initscr();
wprintw(wnd, "Hello world!");
refresh();
endwin();
return 0;
}
但是这个没有:
...
int main()
{
initscr();
wprintw(stdscr, "Hello world!"); // the program terminates here
refresh();
endwin();
return 0;
}
这个潜在的多终端程序也不起作用:
...
int main()
{
SCREEN* term = newterm(NULL, stdout, stdin);
set_term(term);
wprintw(stdscr, "Hello world!"); // the program terminates here
refresh();
endwin();
return 0;
}
所以我不知道stdscr
变量发生了什么。我正在使用 Windows 8.1 x64、Visual Studio 2012 的 VC++ x64 和 PDCurses 3.4.0.3(使用 Nuget 包管理器下载)。