- 编译器: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;