当我将stdscr变量传递给任何接收WINDOW*参数的函数(例如,keypad和wprintw)时,我的 PDCurses 程序终止。但是当我捕获WINDOW*返回的initscr并使用它时它会起作用。
我假设一旦initscr被调用,WINDOW*它的返回值和stdscr变量应该是相同的。但是在比较了他们的地址之后,我意识到事实并非如此。
我可以继续使用WINDOW*返回的 by ,但这在一个必须使用返回 a而不是 ainitscr的多终端程序中不起作用。在那种情况下,我必然需要使用仍然拒绝工作的变量。newtermSCREEN*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 包管理器下载)。