2016-05-11 7 views
0
#include <curses.h> 
#include <fstream> 

int main(){ 

    initscr(); 
    mvwprintw(stdscr, 1,1, "hello world"); 
    wmove(stdscr, 1,1); 

    chtype* p = 0; 
    int n = 0; 
    n = winchstr(stdscr, p); 

    std::ofstream test("test.txt"); 

    test << n << " " << (p == nullptr); 

    endwin(); 

} 

Iはバック文の先頭にカーソルを移動し、hello worldを印刷し、winchstrを用いpに画面上にあるものの内容を保存しようとします。ファイルtest.txtを除いて、私はpを示唆出力のみ-1 1は(すなわち、-1)変わらずだったとERR参照documentationで説明するよう、返されました:ncurses inchstr関数が意図したとおりに動作していませんか?上記で

int型winchstr(WINDOW *勝利、はchtypeの* CHを)。

説明: これらのルーチンは、 が現在または指定された位置から始まる、と 右マージンで終わる、窓からはchtypeまたはcchar_tの文字列を読み取る、またはn個の要素の後に、いずれか小さい方。

戻り値: すべての関数は、読み取られた要素の数、または エラーのERRを返します。

私はドキュメントを誤解しましたか? hello worldで始まる行の内容は、winchstrを使用した後、pによって指し示された場所に格納されるべきですか?なぜそれはエラーを返すのですか?

答えて

1

ロケーションpはヌルポインタです。 ncursesはおそらくそれを見て、それを使用することを拒否します。マニュアルページには

と定義されています。 chstrパラメータ がヌルの場合、データは返されず、戻り値はゼロです。

ヌル以外のポインタを使用してwinchstrを使用する場合、ncursesは結果に十分なスペースを提供する必要があります。サイズを指定するには、winchnstrを使用します。

+0

ありがとうございます。私はそれが参照によってポインタを取ったと仮定し、私が望むものを指すポインタの場所を変更しました。 (cursesの 'getyx'関数はまだ2つの渡された整数を変更しません)。 – Silversonic

関連する問題