我正在做一个练习,我需要打印指针的内存(地址)。使用printf("%p", ..)很容易,但我不允许使用它。
你知道不使用printf()我怎么得到地址吗?
我唯一能用的函数是“write”。
以下是我的练习陈述:
编写一个接受(const void *addr, size_t size)的函数,并显示
如示例中所示的内存。
函数必须声明如下:

void print_memory(const void *addr, size_t size);

$ cat main.c

void  print_memory(const void *addr, size_t size);

int   main(void)
{
      int tab[10] = {0, 23, 150, 255,
                     12, 16,  21, 42};

      print_memory(tab, sizeof(tab));
      return (0);
}

$ gcc -Wall -Wall -Werror main.c print_memory.c && ./a.out | cat -e
0000 0000 1700 0000 9600 0000 ff00 0000 ................$
0c00 0000 1000 0000 1500 0000 2a00 0000 ............*...$
0000 0000 0000 0000                     ........$

最佳答案

你可以尝试如下:

#include <stdio.h>

void print_memory(const void *addr, size_t size)
{
    size_t printed = 0;
    size_t i;
    const unsigned char* pc = addr;
    for (i=0; i<size; ++i)
    {
        int  g;
        g = (*(pc+i) >> 4) & 0xf;
        g += g >= 10 ? 'a'-10 : '0';
        putchar(g);
        printed++;

        g = *(pc+i) & 0xf;
        g += g >= 10 ? 'a'-10 : '0';
        putchar(g);
        printed++;
        if (printed % 32 == 0) putchar('\n');
        else if (printed % 4 == 0) putchar(' ');
    }
}

int main(void) {
int tab[10] = {0, 23, 150, 255, 12, 16, 21, 42};

print_memory(tab, sizeof(tab)); return (0);

    return 0;
}

输出
0000 0000 1700 0000 9600 0000 ff00 0000
0c00 0000 1000 0000 1500 0000 2a00 0000
0000 0000 0000 0000

关于c - 如何在不使用printf的情况下打印指针地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48066271/

10-09 01:21