使用用户输入的十六进制值读取 c 中的内存地址

Reading memory address's in c using user inputted hex values

目的是让用户输入内存地址(十六进制)并打印出地址的内容。

摩托罗拉 68HC11 上的代码是 运行。

到目前为止,我能够使用硬编码值读取内存地址:

void displayMemory(){
    char *p = (char*)0x5000;
    printf("Address Ascii: %s\n",p);
}

但是我尝试了多种使用用户输入数据的方法,例如:

void displayMemory(char *arr){
    char *p = arr;
    printf("Address Ascii: %s\n",p);
}

^^ 其中 *arr 是输入的十六进制值。如:40a

我也尝试过将十六进制值硬编码为 char 数组,例如:

void displayMemory(){
    char *p = "0x5000";
    printf("Address Ascii: %s\n",p);
}

这也没有用,给了我一个不同的内存地址。

任何想法将不胜感激,我可能很愚蠢!

更新: 函数的调用方式

char *arr;
arr = malloc(size * sizeof(char));
if(arr){
    strncat(arr, &userInput[3], size);
    displayMemory(arr);
}else{
    return 0;
}

用户输入是:dm 40a 大小是:本例中 userInput 的数字部分的长度 3

首先,据我所知,这是不可能的。 我也问过我的教授,他告诉我我们不能那样做,实际上你也不知道在任何特定地址存储了哪种类型的数据。 很抱歉,但无法通过这种方式访问​​数据。

您即将自己找到解决方案。如果您将地址输入到字符数组中,例如:

char address[16];
printf("Enter address in hexa: ");
scanf("%15", address);

并在其中输入 40a ,地址将指向以下字符数组: { '4', '0', 'a', '[=13=]', ...} 终止空后的内容无关紧要。完全像 char *p = "0x5000"; p 指向(不可修改,因为文字)字符数组 { '0', 'x', '5', '0', '0', '0', '\0 '}`。假设使用 ASCII,它在第一种情况下给出 { 0x34, 0x30, 0x41, 0, ...},在第二种情况下给出 { 0x30, 0x78, 0x35, 0x30, 0x30, 0x30, 0}。在任何一种情况下,它都存在于与值无关的任意地址。

当地址 预期值时有效。所以需要读取地址为整型值,然后转为char指针

int address;
scanf("%i", &address);
char *p = (char *) address;    // NOT &address!