首页 > 解决方案 > 如何将内存地址转换为char字符串

问题描述

我想将内存段的地址转换为 char 字符串。

这是一个代码示例:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int size = 20;
    char buffer[10];
    char *ptr = (char*) malloc(size);
    printf("Ptr addr: %p\n", ptr);
    if(ptr != NULL)
    {
        snprintf(buffer, "%p", ptr);
        printf("Ptr addr stored in buffer: %p\n", buffer);
    }
    return EXIT_SUCCESS;
}

输出:

指针地址:0x55ab2a43e260

Ptr addr 存储在缓冲区中:0x7ffe9a76470e

不幸的是,当我使用示例代码中的方法时,我有两个不同的地址。有人可以告诉我我做错了什么吗?

最好的问候,乌萨姆

标签: c

解决方案


此代码打印 的地址buffer而不是其中的内容:

printf("Ptr addr stored in buffer: %p\n", buffer);

你可能想要

printf("Ptr addr stored in buffer: %s\n", buffer);

假设前面的代码填充buffer了.ptr

正如评论中所述,您的调用snprintf()不正确。它应该是

    snprintf(buffer, sizeof(buffer), "%p", (void *) ptr);

请注意转换为(void *)-%p格式说明符需要一个void *指针。

buffer可能还需要超过 10 个字节,具体取决于您的系统。


推荐阅读