没有printf%p

时间:2016-05-27 10:31:32

标签: c printf

我是C编程的一年级学生,所以我的技能/知识有限。我正在尝试在printf上创建自己的实现,但是我在检索和打印变量的地址时遇到了麻烦。使用printf,可以使用%p输出变量的地址,我需要以某种方式复制%p

存储变量的地址时,数据类型为int*,我无法弄清楚如何将此地址写入屏幕(stdout)。

例如:

int i        = 123;
int *address = &i;

现在我如何输出address(不是i的值)?我尝试使用原始的printf格式说明符进行测试。我尝试使用%x,%s,%d,%lu ...当我尝试输出int*(整数指针)时,它都会给我一个错误。

有人可以协助我输出地址吗?

2 个答案:

答案 0 :(得分:5)

您只能使用unsigned char:

类型检查指针的位并打印它们
unsigned char* a = ( unsigned char* )address;
for( size_t i = 0 ; i < sizeof( address ) ; i++ )
     printf( "%hhu" , a[i] );

如果指针是指向对象的指针,则另一个选项是将指针强制转换为类型:intptr_tuintptr_t,但这些类型的可用性是实现定义的。

答案 1 :(得分:4)

如果它是对象的地址,您可以执行以下操作:

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main(void)
{
  int a;
  uintptr_t uip = (uintptr_t) ((void*) &a);
  printf("address of a = 0x%"PRIXPTR, uip);
}

要打印您需要的功能地址as proposed here