2012-11-22 152 views
0

我真的掙扎與這個問題了幾個小時:c指針問題。編譯器錯誤

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); 

任何幫助非常感謝!

感謝

+0

這是C代碼,對不起混淆 –

+0

'CHAR_PER_KEY'是一個'#define'd常量嗎?我有點困惑,編譯器在第二個消息中將'char szKeyMap [] [CHAR_PER_KEY]'解釋爲'char *'。 –

回答

0

也許它因爲szKeyMapchar**而不是char*

+0

任何想法如何去解決它? 問題是,該代碼是來自軟件開發人員的示例代碼。 ... 很奇怪 –

+0

問題顯然是這樣解決的: getkbd_entry(h_clock,insertPin,pinBuff,0,NUMERIC,szKeyMap [6],sizeof(szKeyMap),6,4);從手動 引用: >默認情況下,在ACT庫,CHAR_PER_KEY被定義爲6。因此 >的應用程序可以有每個鍵5個字符的鍵盤映射陣列中 這只是憑空猜測對我來說,我不能真正理解它 –

0

我把你的代碼並添加一個簡單的幾行代碼,使其編譯,它編譯罰款用gcc -Wall我。但是,如果不匹配「char」與「unsigned char」與「signed char」,則gcc -Wall將有效地生成與您所看到的相同的錯誤消息。這似乎有點反直覺了,因爲「char」必須是有符號的或無符號的,但仔細檢查你的字符串定義是否完全匹配,因爲它涉及到有符號,無符號或未指定,並查看是否有幫助。

0

問題顯然是解決這種方式:從手動

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

引用:

默認情況下,在ACT庫,CHAR_PER_KEY被定義爲6。因此 該應用程序可以有五個在keymapping陣列中的每個鍵的字符

這只是爲我猜測,我不能理解它..