0

just as the title says how to compare between memory addresses's contents?,
my function will get two memory pointers and i want to compare their first "len" from what they're pointing to

i'm getting here invalid use of void * when i compile

int my_bcmp (const void *r1, const void *r2)
{
  int i;

  for(i=0; i<LENGTH && i<len; i++)
    if(*b1+i != *b2+i)
        return -1;
  return 0;
}
2
Contributors
5
Replies
21
Views
2 Months
Discussion Span
Last Post by rproffitt
0

@rproffitt cuz im trying to figure what's wrong with this code the function always returns -1

#include <stdio.h>

#define LENGTH 128

int my_bcmp (const void *b1, const void *b2, size_t len);

int main()
{
  int b1, b2, len;
  char str[LENGTH];
  scanf("%d%d%d%s",&len,&b1,&b2,str);
  printf("Mybcmp result: %d\n",my_bcmp((char*)str+b1,(char*)str+b2,len));

  return 0;
}

int my_bcmp (const void *r1, const void *r2, size_t len)
{
  int i;

  for(i=0; i<LENGTH && i<len; i++)
  {
    if((const char*)r1+i != (const char*)r2+i)
        return -1;
  }
  return 0;
}
0

When crafting wheels my advice is to look at existing wheels. Memory comparison is a stock function so let's see how it's done and be done with minor functions in a jiffy.

Now there are prior discussions about the use of const void so I didn't write a thing about that.

0

If you mean't about lines 5 and 17 just saying that wasn't the issue at all i was just trying different inputs and forgot to change it back before posting,
I've seen the actual memory comparison in the library so here it is
But still i don't understand why the fgets eats the first 2 characters of the string, for example:
input: 3 0 3 123123
output suppsoed to be: 0
since (char)str+0 and (char)str+3 from those indexes when comparing 3 indexes forward it should be the same string
but (char*)str+3 gets to be 3123 instead of 123, why?

    #include <stdio.h>

    #define LENGTH 128

    int my_bcmp (const void *b1, const void *b2, size_t len);

    int main()
    {
      int b1, b2, len;
      char str[LENGTH];

      printf("Enter length and two indexes followed by a string:\n");
      scanf("%d%d%d",&len,&b1,&b2);

      printf("Enter a string:\n");
      fgets (str, LENGTH, stdin);

      printf("len:%d strb1:%s  strb2:%s str:%s\n",len,(char*)str+b1,(char*)str+b2,str);
      printf("Mybcmp result: %d\n",my_bcmp((char*)str+b1,(char*)str+b2,len));

      return 0;
    }

    int my_bcmp (const void *b1, const void *b2, size_t len)
    {
      int i=len;
      const char* r1=(const char*)b1;
      const char* r2=(const char*)b2;

      while (i-- > 0)
        {
          if (*r1++ != *r2++)
          return -1;
        }
      return 0;
    }

Edited by Adam_35

0

fgets? That's not the topic from the top. If you want to start another discussion about fgets() problems, do that.

Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.