7

我的代码如下所示:

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

有什么线索吗?

4

5 回答 5

9

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

于 2009-06-18T05:54:37.320 回答
8

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

采用:

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

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

于 2009-06-18T05:53:37.710 回答
4

在这种情况下,KEY_F(9)正在评估的范围之外的东西char。该switch语句假设因为它的参数是 a char,所以所有 case 标签也将是。改变switch阅读switch((unsigned int)ch)将治愈它。

于 2009-06-18T05:53:37.243 回答
0

看起来 KEY_F(9) 必须评估为超出字符范围的内容。

于 2009-06-18T05:53:33.607 回答
0

其他人对 char 范围的看法。

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

于 2009-06-18T06:05:00.157 回答