2016-07-13 8 views
0

コードのこの作品は、エラーerror: invalid operands to binary -を与えている:エラー:バイナリに無効なオペランド -

if(memcmp(params , DEV_SERVICE_DISCOVERY , strlen(DEV_SERVICE_DISCOVERY)) == 0) 
{ 
    UINT8 *yes_no; 

    params = XSH_UtilFindNextToken(params); 
    yes_no = XSH_UtilFindNextToken(params); 

    params[yes_no - params - 1] = '\0'; 

    rc = AppTest_ServiceDiscovery(params, yes_no , strlen(yes_no), pOut); 
} 

私はchar *yes_noUINT8 *yes_noを変更し、それを解決してしまいました。しかし、なぜエラーが来て、なぜ解決したのか分からなかった。問題を説明してください。

ありがとうございます。

+1

重複しない:ポインタを追加するのはナンセンスですが、それらを減算するとポインタが同じ配列に属する場合にオフセットを計算するのに便利です –

+2

'params'の型は何ですか?私はそれが 'char *'だと思っています。もしそうなら、それはそれを説明する。ポインタの減算では、ポインタの型が同じである必要があります。 – kaylum

+0

はいparamはchar *です。 – Abhinav

答えて

3

2つのポインタを減算する場合、それらは同じ型でなければなりません。これは、Cでのポインタ演算がpointeesのサイズに基づいているためです。例えば、char*からint*を引くと、1バイトのオブジェクトと4バイトのオブジェクトがあるため、コンパイラが知る方法はありません結果が1バイト単位であろうと4バイト単位であろうと、

私はあなたの2つのpointeeが両方とも1バイトであることを認識していますが、これはまだ標準Cでは許されていません(異なるエリアのオブジェクトが同じエリアに格納されるなどという仮定はありません)。

関連する問題