2

次のコードがあり、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 * です

4

1 に答える 1

7

型キャストは、演算子よりも優先順位が低くなります。[]現在のコードは次と同じです

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

あなたはおそらく意味した

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

代わりは。

于 2013-10-16T09:59:55.287 に答える