最近、次のようなポインターを比較するコードをいくつか書きました。
if(p1+len < p2)
しかし、一部のスタッフは、次のように書くべきだと言いました。
if(p2-p1 > len)
安全であるために。ここで、p1とp2はchar *
ポインタで、lenは整数です。私はそれについて何も知りません。そうですか?
EDIT1: もちろん、p1とp2は同じメモリ オブジェクトへのポインターです。
EDIT2: ちょうど 1 分前に、コード (約 3K 行) でこの質問のボゴを見つけました。これは、4 バイトのポインターに格納できないlen
ほど大きいため、 p1+len < p2はtrueです。実際にはそうではないので、状況によっては次のようなポインターを比較する必要があると思います。p1+len
if(p2 < p1 || (uint32_t)p2-p1 > (uint32_t)len)