0

我在这个问题上挣扎了几个小时:

char szKeyMap[MAX_ALPNUM_KEYS][CHAR_PER_KEY]= {"0- +%",  "1QZ.\\", "2ABC&",  "3DEF%",  "4GHI*",  "5JKL/", "6MNO~", "7PRS^", "8TUV[", "9WXY]",  "*,'\":", "#=:$?" };



getkbd_entry(h_clock,insertPin,pinBuff,0,NUMERIC ,szKeyMap,sizeof(szKeyMap), 6 , 4);

getkbd_entry 原型是:

int getkbd_entry(int h_clock, char *msg, char *outbuf, unsigned wait,
unsigned type, char szKeyMap[][CHAR_PER_KEY],
int KeyMapSize, int va_alist, ...);

我在编译器中遇到的错误:

"C:\Bin\test.c", line 90: Warning:  #167-D: argument of type "c
har *" is incompatible with parameter of type "signed char *"
  getkbd_entry(h_clock,insertPin,pinBuff,0,NUMERIC ,szKeyMap,sizeof(szK
eyMap), 6 , 4);

                                 ^
"C:\Bin\test.c", line 90: Error:  #167: argument of type "signe
d char (*)[6]" is incompatible with parameter of type "char *"
  getkbd_entry(h_clock,insertPin,pinBuff,0,NUMERIC ,szKeyMap,sizeof(szK
eyMap), 6 , 4);

任何帮助深表感谢 !

谢谢

4

3 回答 3

0

问题显然是这样解决的:

getkbd_entry(h_clock,insertPin,pinBuff,0,NUMERIC ,szKeyMap[6],sizeof(szKeyMap), 6 , 4);

从手册中引用:

默认情况下,在 ACT 库中,CHAR_PER_KEY 定义为 6。因此,应用程序在键映射数组中的每个键可以有五个字符

这对我来说只是猜测,我无法理解它..

于 2012-11-22T12:42:43.717 回答
0

也许是因为szKeyMapchar**而不是char*

于 2012-11-22T01:12:31.420 回答
0

我拿了你的代码并添加了几行简单的代码来编译它,它用 gcc -Wall 对我来说编译得很好。但是,如果您不匹配“char”、“unsigned char”和“signed char”,gcc -Wall 将有效地产生与您看到的相同的错误消息。这似乎有点违反直觉,因为“char”必须是有符号或无符号的,但请仔细检查您的字符串定义是否与有符号、无符号或未指定完全匹配,看看是否有帮助。

于 2012-11-22T01:24:38.413 回答