我有以下代码,并且在if语句中由编译器收到“非零整数转换为指针”警告。
我尝试了多种组合来删除警告,包括用双引号包裹我的条件的右侧,例如。 “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 *
答案 0 :(得分: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')
/* ^ ^ ^ ^ */
代替。