2013-10-16 43 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') 
/*^     ^   ^     ^  */ 

代替。