Подтвердить что ты не робот

Как имитировать формат printf% p при использовании std:: cout?

unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX

Как распечатать адрес переменной с помощью iostream s? Есть ли std::??? например, std::hex сделать такой вид преобразования (адрес → строка), поэтому std::cout << std::??? << teta << std::endl напечатает этот адрес?

(нет спрайтов, пожалуйста;))

4b9b3361

Ответ 1

Вставить в void*:

unsigned char* teta = ....;
std::cout << "data at " << static_cast<void*>(teta) << "\n";

iostreams обычно предполагают, что у вас есть строка с любым указателем char*, но указатель void* - это именно тот адрес (упрощенный), поэтому iostreams не могут ничего сделать, кроме преобразования этого адреса в строку, а не содержание этого адреса.

Ответ 2

В зависимости от того, что вы хотите использовать больше параметров форматирования 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;