>できればstr系ではなく、mem系を使用する
>ようにと言われているのですが・・・。
ずいぶんと、イジワルなことを言われちゃいましたね。
では、がんばってみましょう。
{
char *ptr1, *ptr2;
int maxleng;
maxleng = (d1->len - strlen(d2) < 0)?strlen(d2):d1->len ;
ptr1 = malloc((size_t)maxleng+1);
ptr2 = malloc((size_t)maxleng+1);
memset(ptr1, 0x00, maxleng+1);
memset(ptr2, 0x00, maxleng+1);
memcpy(ptr1, d1->ptr, d1->len);
memcpy(ptr2, d2, strlen(d2));
if( memcmp( ptr1, ptr2, maxleng ) == 0 ) {
// 一致した場合の処理
}
else {
// 一致しなかった場合の処理
}
free(ptr1);free(ptr2);
}
-----------------------------------------------
どうでしょう?判りにくくなったでしょ?(笑)
memcmpで比較する2つの領域のサイズが、memcmpの第3パラメータ
で指定する数値よりも小さいと、落っこちる可能性が
あるんで、maxlengを求めるようにしました。
私なら、間違い無くstrcmp()を使います。楽だし。見やすいし。
それか、whileしながら1文字ずつ比較する内部関数を作ります。
>比較対照がunsigned char と charのためキャストしなけ
>ればコンパイルエラーとかなりませんか?
エラーにはなりませんが、気になるなら、
strcmp((char *)ptr, d2) または、
memcmp((void *)ptr1, (void *)ptr2, (size_t)maxlen)
にしてみましょう。でも、ここまでするのはヤリスギな気がします。
何にキャストするのが正解かは、string.hとかmemory.hの中を
見たり、HELP(とかman)を見れば判ります。
補足
ありがとうございます。 ただちょっと補足なのですが、 できればstr系ではなく、mem系を使用する ようにと言われているのですが・・・。 また、比較対照がunsigned char と char のためキャストしなければコンパイルエラー とかなりませんか?