Reputation: 3082
unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX
How can I print variable address using iostream
s? Is there a std::
??? feature like std::hex
to do this kind of conversion (address -> string), so std::cout << std::??? << teta << std::endl
will print that address?
(no sprintf's, please ;))
Upvotes: 20
Views: 10752
Reputation: 4598
Depending on wheter or not you want to use more formatting options printf gives, you could consider using sprintf
By it, you could format a string just like you'd do with printf, and afterwards print it out with std::cout
However, this would involve using a temporary char array so the choice depends.
An example:
unsigned char *teta = ....;
...
char formatted[ 256 ]; //Caution with the length, there is risk of a buffer overflow
sprintf( formatted, "data at %p\n", teta );
std::cout << formatted;
Upvotes: 1
Reputation: 131907
Cast to void*
:
unsigned char* teta = ....;
std::cout << "data at " << static_cast<void*>(teta) << "\n";
iostreams generally assume you have a string with any char*
pointer, but a void*
pointer is just that - an address (simplified), so the iostreams can't do anything other than transforming that address into a string, and not the content of that address.
Upvotes: 29