我必须实现一个函数,当我用malloc()
分配它时,它会返回指针的内存地址。我知道malloc(value)
在堆上分配一个大小为value
的区域。
我知道如何实现打印该指针的内存地址的代码:
void *s = malloc (size)
printf("%p\n",s);
我的问题是,如何将该代码打印的值保存在int或string中?我可以?如果这是一个愚蠢的问题,我很抱歉...
答案 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()是最好的选择。在这里你可以简单地把任何东西放在一个字符串里。