0

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

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

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

谢谢你。

4

3 回答 3

5

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

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

我建议您需要考虑使用 IPC 的某些方法,例如共享内存或消息队列,请参阅http://en.wikipedia.org/wiki/Inter-process_communication获取一些链接。有很多方法可用。您应该使用它来移动双精度值,而不是指向它的指针。如果两个程序都需要同时访问该双重,那么您需要考虑无论如何您将如何同步它。

请不要将文件系统用于 IPC。这真是一个可怕的想法。

于 2013-06-04T11:06:01.927 回答
0

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

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

//use value for other operations.
于 2013-06-04T10:37:38.627 回答
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);
于 2013-06-04T11:41:16.710 回答