我的代码如下所示:

char * decode_input(char ch)
{
        switch(ch) {
                case 'g':
                        return "get";
                        break;
                case KEY_F(9):
                        return "quit";
                        break;
                default:
                        return "unknown";
                        break;
        }
}

有什么线索吗?

有帮助吗?

解决方案

char 是 -128 到 127 之间的数字。KEY_F(9) 可能是该范围之外的值。

使用:

  • 无符号字符,或
  • 整数,或
  • (字符)KEY_F(9)

或者更好的是,使用调试器并确定 sizeof(KEY_F(9)) 以确保它是一个字节而不是短字节。

其他提示

好吧,KEY_F(9)将是273(参见curses.h),它超出了char(-128,127)的范围。

在这种情况下, KEY_F(9)正在评估 char 范围之外的内容。 switch 语句假设因为它的参数是 char ,所以所有的case标签也都是。更改开关以读取开关((unsigned int)ch)将使其治愈。

看起来KEY_F(9)必须评估一个超出char范围的东西。

关于char的范围,其他人都说了什么。

我记得从我早期编写C ...你可能从循环中调用decode_input,对吗?如果用户按下F9之类的东西,你将在键盘缓冲区中得到两个字节 - 第一个字节将是0x0。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top