如何创建指向地址存储在 char 数组中的变量的指针?
How to make a pointer to a variable whose address is stored in a char array?
我有一个程序,其中我通过以下方式将变量 "var" 的地址存储在一个字符数组中:
int var = 10; //defined in somefile
sprintf(varAddress,"%p",&var)
所以现在 varAddress
存储 var
的地址(例如 "0x7fff22b823dc"
)。
有什么方法可以使用 varAddress
创建指向变量 var
的指针吗?
假设字符串的格式与%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);
请注意,除非指针的值来自此 运行 进程本身,否则任何取消引用此指针的尝试都将是未定义的行为。此外,您从字符串中检索其指针的对象必须仍然存在,并且指针的类型必须与对象的类型相匹配。所有这些限制使得很难想象一个从字符串中读取指针的用例可以达到任何实际目的。
如果在您的实现中将整数地址转换为指针是安全的,并且您知道在特定地址您可以访问某些内容(例如硬件寄存器):
void *getPointerFromString(const char *addr)
{
return (void *)strtoull(addr, NULL, 16);
}
/* .........*/
char varAddress[] = "0x7fff22b823dc";
int *ptrv = getPointerFromString(varAddress);
*ptrv = 10;
我有一个程序,其中我通过以下方式将变量 "var" 的地址存储在一个字符数组中:
int var = 10; //defined in somefile
sprintf(varAddress,"%p",&var)
所以现在 varAddress
存储 var
的地址(例如 "0x7fff22b823dc"
)。
有什么方法可以使用 varAddress
创建指向变量 var
的指针吗?
假设字符串的格式与%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);
请注意,除非指针的值来自此 运行 进程本身,否则任何取消引用此指针的尝试都将是未定义的行为。此外,您从字符串中检索其指针的对象必须仍然存在,并且指针的类型必须与对象的类型相匹配。所有这些限制使得很难想象一个从字符串中读取指针的用例可以达到任何实际目的。
如果在您的实现中将整数地址转换为指针是安全的,并且您知道在特定地址您可以访问某些内容(例如硬件寄存器):
void *getPointerFromString(const char *addr)
{
return (void *)strtoull(addr, NULL, 16);
}
/* .........*/
char varAddress[] = "0x7fff22b823dc";
int *ptrv = getPointerFromString(varAddress);
*ptrv = 10;