當我將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