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