保存指针的内存地址

时间:2013-12-05 19:02:47

标签: c unix pointers malloc

我必须实现一个函数,当我用malloc()分配它时,它会返回指针的内存地址。我知道malloc(value)在堆上分配一个大小为value的区域。

我知道如何实现打印该指针的内存地址的代码:

    void *s = malloc (size)
    printf("%p\n",s);

我的问题是,如何将该代码打印的值保存在int或string中?我可以?如果这是一个愚蠢的问题,我很抱歉...

5 个答案:

答案 0 :(得分:7)

将字符串的值(即某些变量的内存位置)存储在字符串中可以像使用printf一样完成:

char buf[128];
void *s = malloc (size);
sprintf(buf, "%p\n",s);

要将值“保存”为整数(类型),您可以进行简单的转换:

void *s = malloc (size);
size_t int_value = (size_t)s;

因为在c中你永远不知道你的机器地址指针长度是多少,所以这(技术上)不能保证工作正常;对于古怪的架构或编译器来说,这两种方法都可能出错。

答案 1 :(得分:3)

char buf[32] = {0}
snprintf(buf, sizeof buf, "%p\n", s);

然后你可以打印出来:

printf("%s\n", buf);

答案 2 :(得分:2)

您已经将值保存为s中的位模式,因此我假设您只是希望printf的文本输出为字符串。你想要的电话是sprintf:

char text[255];
sprintf(text, "%p\n", s);

答案 3 :(得分:1)

如果你想从你的函数返回指针地址,你可以声明你的函数返回指针类型:

int* myFunc(int n) {
  int* p;
  p = malloc(n*sizeof(int));
  // more stuff
  return p;
}

这是替代使用sprintf的建议(非常合理地)通过其他答案。

选择。

请注意,在某些系统上int不能保持int*数据类型 - 使用int*不仅更清晰,而且更安全。

答案 4 :(得分:0)

是的sprintf()是最好的选择。在这里你可以简单地把任何东西放在一个字符串里。