pointer arithmetic

J

jois.de.vivre

Hello,

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?
 
V

Victor Bazarov

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top