首页 文章

在C中打印指针的地址

提问于
浏览
-2

我正在从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 回答

  • 2

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

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

    另外一个:不能保证 unsigned int 足够大以表示指针值:你应该使用 intptr_t<stdint.h> 来自 <stdint.h> .

相关问题