当我将stdscr
变量传递给接收到WINDOW*
参数的任何函数(例如,keypad
和wprintw
)时,我的PDCurses程序终止。但是,当我捕获由initscr
返回的WINDOW*
并使用它时,它就可以工作。为什么stdscr变量在PDCurses中不起作用?
我假设一旦调用initscr
,它返回的WINDOW*
和stdscr
变量应该是相同的。但在比较他们的地址后,我意识到事实并非如此。
我可以继续使用WINDOW*
通过initscr
返回,但不会在多终端程序工作,其中一个必须使用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和使用Nuget包管理器下载的PDCurses 3.4.0.3。
一个简短的示例程序会有所帮助(PDCurses不会从'initscr'返回'stdscr';也许你已经声明了一个冲突的变量)。 –
谢谢。我添加了示例代码。是的,我提到我可以使用'initscr'返回的'stdscr',但我需要知道为什么'stdscr'变量不适合我。 – eXe