在C中打印指针的地址

时间:2017-03-30 18:16:57

标签: c printf

我正在从scrap中复制printf,我需要将指针地址存储到一个字符串然后打印它,所以首先我将void *转换为unsigned int然后将它转换为十六进制,但最后三个char是错误的。

int     main(void)
{
    char    str[] = "printf from scrap!";

    my_printf("MY_PRINTF:'%p'", (void*)str);
    printf("\n   PRINTF:'%p'\n\n", (void*)str);

    return (0);
}

int     conv_p(va_list args)
{
    void    *ptr;
    unsigned int        ptrint;

    ptr = va_arg(args, void*);
    ptrint = (unsigned int)&ptr;
    my_putstr("0x7fff");
    my_putstr(my_itoa_base_uint(ptrint, 16));

    return (1);
}

输出:

MY_PRINTF:'0x7fff505247b0'
   PRINTF:'0x7fff50524a20'

正如你可以看到最后三个字符是错误的,有没有关于它的文档?

1 个答案:

答案 0 :(得分:3)

在第二种情况下,您将变量ptr的地址转换为int,而不是其值(您感兴趣的指针)。

(unsigned int)&ptr;替换(unsigned int)ptr;将为您提供一致的值。

另外一点:不能保证unsigned int足以表示指针值:您应该使用intptr_t中的uintptr_t<stdint.h>