Victor Bazarov wrote:
> wrote:
> > I'm trying to get the number of bytes between two pointers of type
> > char*. For example, say I have the following code:
> >
> > int main()
> > {
> > char* message = "this is a test";
> > char* p1 = strstr(message, "is");
> > char* p2 = strstr(message, "test");
> >
> > //find # characters between p2 and p1
> >
> > return 0;
> > }
> >
> > To find the number of chars between p2 and p1, I tried
> >
> > int len = (int)p2 - (int)p1;
> >
> > in the legacy C manner, but it gives me an error:
> >
> > error: cast from 'char*' to 'int' loses precision
> >
> > I tried using C++ casts:
> >
> > int len = reinterpret_cast<int>(p2) - reinterpret_cast<int>(p1);
> >
> > but it gives me the same error.
> >
> > I read GNU C++ user's guide and it says that it only permits pointer
> > arithmetic between pointers to void and pointers to functions. So I
> > tried the following:
> >
> > int len = ((void*)p2 - (void*)p1);
> >
> > Now it gives me the error:
> >
> > error: invalid use of void
> >
> > Which i'm guessing is because i'm trying to assign an 'void*' to an
> > 'int' type.
> >
> > Basically all I want to know how to get the address of a pointer and
> > store it as an int. Is there any way to do this?
> >
>
> Have you tried simply
>
> ptrdiff_t len = p2 - p1;
>
> ???
>
> V
Great! Thanks, that works.