Printing the address of a struct object
Solution 1
%x
expects 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:
printf("%p\n", (void *)val);
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:
struct somestruct {
int a;
int b;
};
somestruct *val = new somestruct; // even this is questionable.
std::cout << val;
Solution 2
Use the %p format specifier to print a pointer.
printf("%p\n", val);
Solution 3
If you want to cast then using reinterpret_cast instead of static_cast might do the trick here.
With printf try using the %zu instead of %x for printing out a pointer because the pointer is of unsigned integer type (ie %zu).
printf("%zu \n", val);
Just one other thing, being a c++ program is there a reason why you are using malloc instead of new?
bdhar
Updated on June 04, 2022Comments
-
bdhar almost 2 years
I have a
struct
like thistypedef struct _somestruct { int a; int b; }SOMESTRUCT,*LPSOMESTRUCT;
I am creating an object for the
struct
and trying to print it's address like thisint 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 thisprintf("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.