如何创建一个指向其地址存储在char数组中的变量的指针?

时间:2017-09-12 11:20:15

标签: c pointers string-parsing

我有一个程序,我已经存储了变量的地址" var"在这个char数组中:

int var = 10; //defined in somefile
sprintf(varAddress,"%p",&var)

现在varAddress存储var的地址(例如"0x7fff22b823dc")。

有什么方法可以使用varAddress创建指向变量var的指针吗?

2 个答案:

答案 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);

Demo.

请注意,除非指针的值来自此运行进程本身,否则任何取消引用此指针的尝试都将是未定义的行为。此外,从字符串中检索其指针的对象必须仍然存在,并且指针的类型必须与对象的类型匹配。所有这些约束使得很难想象一个用例,从字符串中读取指针可以用于任何实际目的。

答案 1 :(得分:-1)

如果在你的实现中将整数地址转换为指针是安全的,并且你知道在特定的地址你有一些你可以访问的东西(例如硬件寄存器):

void *getPointerFromString(const char *addr)
{
    return (void *)strtoull(addr, NULL, 16);
}

/* .........*/ 

char varAddress[] = "0x7fff22b823dc";
int *ptrv = getPointerFromString(varAddress);

*ptrv = 10;