我的代码如下所示:
char * decode_input(char ch)
{
switch(ch) {
case 'g':
return "get";
break;
case KEY_F(9):
return "quit";
break;
default:
return "unknown";
break;
}
}
任何线索?
答案 0 :(得分:8)
char是-128到127之间的数字.KEY_F(9)可能是该范围之外的值。
使用:
甚至更好,使用调试器并确定sizeof(KEY_F(9))以确保它是一个字节而不是短。
答案 1 :(得分:8)
好吧,KEY_F(9)将是273(参见curses.h),它超出了char(-128,127)的范围。
答案 2 :(得分:4)
在这种情况下,KEY_F(9)
正在评估char
范围之外的内容。 switch
语句假设因为它的参数是char
,所以所有案例标签也是如此。将switch
更改为阅读switch((unsigned int)ch)
可以解决问题。
答案 3 :(得分:0)
看起来KEY_F(9)必须评估一个超出char范围的东西。
答案 4 :(得分:0)
关于char的范围,其他人都说了什么。
我记得从我早期编写C ...你可能从循环中调用decode_input,对吗?如果用户按下F9之类的东西,你将在键盘缓冲区中得到两个字节 - 第一个字节将是0x0。