0

自分memcmpで作成していますが、質問があります。

これが私のコードです:

int my_memcmp(void *b, void *c, int len)
{
    unsigned char *p;

    p = b;
    c = b;
    while(len > 0)
    {
        if(b - c != 0)
            return (b - c);
        len--;
        b++;
        c++;
    }
}

int main()
{
    char          *str;
    char          *str2;
    int           i;

    str = strdup("hello");
    str2 = strdup("hellop");
    i = my_memcmp(str, str2, 6);
    printf("%d\n", i);
}

-112 であるはずの出力が 6299669 と間違っています。

エラーは、p = b と c = b のキャストにあると思います。あれは正しいですか?

4

3 に答える 3

3
int my_memcmp(void *b, void *c, int len)
{
    unsigned char *p = b;
    unsigned char *q = c;

    while (len > 0)
    {
        if (*p != *q)
            return (*p - *q);
        len--;
        p++;
        q++;
    }
    return 0;
}
于 2013-09-17T14:56:35.400 に答える
2

b-c違いがある場合 、関数は戻ります。素晴らしい。

両方のメモリブロックが完全に等しい場合はどうなりますか? それは何を返しますか?
(そのコードはどこにあると思いますか?)すべてが等しい場合、何を返す
必要がありますか?

于 2013-09-17T15:01:22.090 に答える
2

内容を比較するためにp = b( を使用して) ポインタを逆参照する必要があるため、いくつかのエラーがあります。*ただし、逆参照できないため、void *キャストが必要です。ただし、 andには 2 つ必要ですunsigned char *p, *q(この行はまったく意味がありません) 。すべてをまとめると、コードが得られます... おっと、Jonathan Leffer がたった今投稿しました :-) いくつかの説明が提供されているので、それでも投稿すると思います。bcc = bpq

于 2013-09-17T14:58:22.803 に答える