2013-10-16 79 views
2

我有以下代碼,並且正在接收編譯器在if語句中的「將非零整數轉換爲指針」警告。c警告消息:將非零整數轉換爲指針

我嘗試了很多組合來刪除警告,包括用雙引號包裹我的條件的右側,例如。 「1」,使警告消失,但條件不起作用。

if ((unsigned char*)buffer[8] == '1' && (unsigned char*)buffer[9] == '1') 
{ 
     unsigned char colorPtr = (unsigned char*)&buffer[10]; 
     singleColor(CDCInstance, lightCount, colorPtr, 6); 
} 

緩衝器是void *類型

回答

7

鑄字具有比[]操作者的下precedence的。您當前的代碼是一樣的

if ((unsigned char*) (buffer[8]) == '1' && (unsigned char*) (buffer[9]) == '1') 
/* note parentheses:^  ^      ^  ^ */ 

你可能是指

if (((unsigned char*) buffer)[8] == '1' && ((unsigned char*) buffer)[9] == '1') 
/*^     ^   ^     ^  */ 

代替。