我有以下代码,并在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);
}
Run Code Online (Sandbox Code Playgroud)
缓冲区属于void*
类型转换的优先级低于[]
运算符.您当前的代码与
if ((unsigned char*) (buffer[8]) == '1' && (unsigned char*) (buffer[9]) == '1')
/* note parentheses: ^ ^ ^ ^ */
Run Code Online (Sandbox Code Playgroud)
你可能意味着
if (((unsigned char*) buffer)[8] == '1' && ((unsigned char*) buffer)[9] == '1')
/* ^ ^ ^ ^ */
Run Code Online (Sandbox Code Playgroud)
代替.