指向存储的特定内存地址的指针

时间:2013-06-04 10:31:27

标签: c pointers memory-address

我在txt文件中有内存位置地址。我想从文件中读取地址并使用存储在该地址的值。这就是我所做的:

char line[10];
FILE *f;
f=fopen("p:\\address.txt", "r");
fgets(line,10,f);

该文件包含地址0x12ff30。我已将其存储在char数组行中。地址包含一个double值(来自0x12ff30的8个字节)。现在如何创建和使用指针来获取存储在该地址的值?

谢谢。

3 个答案:

答案 0 :(得分:5)

请不要这样做。请使用IPC,即进程间通信。

如果您在几乎任何现代计算机系统上有两个进程,它们将拥有自己的虚拟地址空间。一个过程中的指针在其他过程中没有意义。

我建议你需要考虑使用某种IPC方法,如共享内存或消息队列,请参阅http://en.wikipedia.org/wiki/Inter-process_communication了解一些链接。有很多种方法可供选择。您应该使用它来移动double值,而不是指向它的指针。如果两个程序都需要并发访问那个双,那么你需要考虑如何同步它。

请不要使用IPC的文件系统。这真是一个糟糕的主意。

答案 1 :(得分:0)

我们假设该地址中有int值。另外,让我们假设地址是可访问的[当您在另一次地址可能无效时读取文件]并且它不会崩溃。
然后,

void *p;
sscanf(line, "%p", &p);   
double value = *(double *)p;

//use value for other operations.

答案 2 :(得分:0)

你的意思是你想将带有十六进制值的字符串转换为一个int吗? 我有这个例子

#include"stdio.h"
#include"stdlib.h"
int main()
{
    char buff[] = "0x12ff30";
    int num = strtol(buff,NULL,16);
    printf("%x\n", num);  // this is 12ff30

    return 0;

}

所以,你可以试试这个。

char line[10];
FILE *f;
f=fopen("p:\\address.txt", "r");
fgets(line,10,f);
int address = strtol(line,NULL,16);