unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX
如何使用iostream
打印变量地址?有std::
???像std::hex
这样的功能可以执行此类转换(地址 - &gt;字符串),因此std::cout << std::??? << teta << std::endl
会打印该地址吗?
(没有sprintf,请;))
答案 0 :(得分:27)
转换为void*
:
unsigned char* teta = ....;
std::cout << "data at " << static_cast<void*>(teta) << "\n";
iostream通常假设你有一个带有任何char*
指针的字符串,但void*
指针就是那个 - 一个地址(简化),所以除了转换那个地址之外,iostream不能做任何事情到一个字符串,而不是该地址的内容。
答案 1 :(得分:1)
根据您是否想要使用printf提供的更多格式选项,您可以考虑使用sprintf
通过它,您可以像使用printf一样格式化字符串,然后使用std::cout
打印出来
但是,这将涉及使用临时char数组,因此选择取决于。
一个例子:
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;