【发布时间】:2026-02-02 17:10:01
【问题描述】:
我的 main() 应该得到一个地址作为输入,该地址需要存储在void* 地址中。
int main(int argc, char *argv[])
{
if (argc > 1) {
HandleStr = argv[1];
printf("\n Handle passed : %s\n",HandleStr);
}
}
我希望这个 HandleStr 为 void * 类型。我该怎么做?
现在,我想以 ./testapp "0xaf6e9800" 的身份运行 exec
【问题讨论】:
-
您确实知道,在现代操作系统上,进程具有虚拟地址空间,更重要的是,每个进程的虚拟地址空间都与其他进程分开。这意味着一个进程中的有效地址很可能在另一个进程中无效,即使它有效也不能保证它指向相似的数据。
-
argv[]中的参数始终是字符串 (char*)。因此,您输入的地址必须首先转换为数字,然后将其视为指针。 -
如果你想在两个进程之间共享内存,有一个叫做shared memory的东西,即使使用它,两个进程的实际地址也很可能不同。
-
@Joachim Pileborg:典型的用例是将共享内存空间的基础传递给(非 POSIX)子进程,该子进程以相同的偏移量继承缓冲区。这些恶作剧在 Windows 上相当普遍。无论如何,我建议在这里使用“%p”
printf/scanf说明符。
标签: c main void-pointers argv