- 编译器:gcc 4.5.2
- 终端:Xterm
- 操作系统:Linux(x86)
- Ncurses 5.9
我正在编写一个文本编辑器,它使用 ncurses 以图形方式表示一个数组key_strokes[]
。它是一维的,所以我使用宏INDEX(y*maxx+x)
指向key_strokes
( key_strokes[INDEX]
) 中的当前位置。y
是函数返回的终端中x
的当前坐标,是函数getyx(stdscr, y, x)
返回maxx
的每一行中的最大列数getmaxyx(stdscr, maxy, maxx)
。该程序运行良好,直到我按下退格键,由于某种原因,maxx
在它到达下面的开关后,它的值被设置为零。这当然INDEX
不会将其限制为仅数组的第一“行”。
用户的击键被捕获为int key_strokes
。我使用 switch case 来检查它是否是箭头键、退格键、F12 等INDEX
,并maxx
定义为,
#define INDEX (y*maxx+x)
unsigned int maxx = 0;
注意我也在使用cbreak(); noecho(); keypad(stdscr, TRUE);
.
case KEY_BACKSPACE:
if (INDEX >= 0)
{
for(i = INDEX; key_strokes[i] != '\0'; i++) {
key_strokes[i] = key_strokes[i+1];
}
if (total_count > 0) {
total_count--;
}
delch();
if (x == 0) {
move(y-1, maxx-1);
}
else {
move(y, x-1);
} refresh();
}
break;