Моя программа PDCurses завершается, когда я передаю переменную stdscr
любой функции, которая получает аргумент WINDOW*
(например, keypad
и wprintw
). Но это работает, когда я перехватываю WINDOW*
, возвращенный initscr
, и использую его вместо этого.
Я предполагаю, что после вызова 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, VC++ x64 Visual Studio 2012 и PDCurses 3.4.0.3 (загружается с помощью диспетчера пакетов Nuget).
stdscr
изinitscr
; возможно, вы объявили конфликтующую переменную). - person Thomas Dickey   schedule 04.11.2015stdscr
, возвращаемыйinitscr
, но мне нужно знать, почему у меня не работает переменнаяstdscr
. - person eXe   schedule 04.11.2015