没有printf的指针地址C

问题描述 投票:0回答:1

我需要打印指针的地址(基本上是对%p进行重新编码),但不使用printf(),并且只允许使用write()

我该怎么办?您能给我一些提示吗?

例如:

printf("%p", a);

结果:

0x7ffeecbf6b60`
c pointers printf flags
1个回答
0
投票

出于您的目的,您只需要使用write系统调用将指针值转换为十六进制表示形式并将其写入POSIX文件描述符:

#include <stdint.h>
#include <unistd.h>

/* output hex representation of pointer p, assuming 8-bit bytes */
int write_ptr(int hd, void *p) {
    uintptr_t x = (uintptr_t)p;
    char buf[2 + sizeof(x) * 2];
    size_t i;

    buf[0] = '0';
    buf[1] = 'x';
    for (i = 0; i < sizeof(x) * 2; i++) {
        buf[i + 2] = "0123456789abcdef"[(x >> ((sizeof(x) * 2 - 1 - i) * 4)) & 0xf];
    }
    return write(fd, buf, sizeof(buf));
}
© www.soinside.com 2019 - 2024. All rights reserved.