I have a struct like this
typedef struct _somestruct {
int a;
int b;
}SOMESTRUCT,*LPSOMESTRUCT;
I am creating an object for the struct and trying to print it’s address like this
int main()
{
LPSOMESTRUCT val = (LPSOMESTRUCT)malloc(sizeof(SOMESTRUCT));
printf("0%x\n", val);
return 0;
}
..and I get this warning
warning C4313: ‘printf’ : ‘%x’ in
format string conflicts with argument
1 of type ‘LPSOMESTRUCT’
So, I tried to cast the address to int like this
printf("0%x\n", static_cast<int>(val));
But I get this error:
error C2440: ‘static_cast’ : cannot
convert from ‘LPSOMESTRUCT’ to ‘int’
What am I missing here? How to avoid this warning?
Thanks.
%xexpects an unsigned. What you’re printing is a pointer. To do that correctly, you normally want to use%p. To be pedantically correct, that expects a pointer to void, so you’ll need to cast it:In reality, most current implementations use the same format for all pointers, in which case the cast will be vacuous. Of course, given the C++ tag, most of the code you’ve included becomes questionable at best (other than the parts like LPSOMESTRUCT, which are questionable regardless). In C++, you normally want something more like: