我有一个程序,我已经存储了变量的地址" var"在这个char数组中:
int var = 10; //defined in somefile
sprintf(varAddress,"%p",&var)
现在varAddress
存储var
的地址(例如"0x7fff22b823dc"
)。
有什么方法可以使用varAddress
创建指向变量var
的指针吗?
答案 0 :(得分:2)
假设字符串的格式与%p
格式转换支持的实现定义格式匹配,您可以按如下方式解析指针:
int var = 10;
// Writing the address into a string
char buf[100];
sprintf(buf, "%p", (void*)&var);
printf("Address string: %s\n", buf);
// Reading the address back
void *ptr;
sscanf(buf, "%p", &ptr);
int *vptr = ptr;
printf("Got address back: %p\n", (void*)vptr);
请注意,除非指针的值来自此运行进程本身,否则任何取消引用此指针的尝试都将是未定义的行为。此外,从字符串中检索其指针的对象必须仍然存在,并且指针的类型必须与对象的类型匹配。所有这些约束使得很难想象一个用例,从字符串中读取指针可以用于任何实际目的。
答案 1 :(得分:-1)
如果在你的实现中将整数地址转换为指针是安全的,并且你知道在特定的地址你有一些你可以访问的东西(例如硬件寄存器):
void *getPointerFromString(const char *addr)
{
return (void *)strtoull(addr, NULL, 16);
}
/* .........*/
char varAddress[] = "0x7fff22b823dc";
int *ptrv = getPointerFromString(varAddress);
*ptrv = 10;