目的是允许用户输入内存地址(十六进制)并打印出地址内容。
代码在Motorola 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;
}
userInput是:dm 40a size是:在这种情况下userInput的数字部分的长度3
答案 0 :(得分:1)
您即将自己找到解决方案。如果您将地址输入char数组,例如:
char address[16];
printf("Enter address in hexa: ");
scanf("%15", address);
并在其中键入40a
,地址将指向以下字符数组:{ '4', '0', 'a', '\0', ...}
终止空值后的内容无关紧要。与char *p = "0x5000";
p中的明显一样,指向(不可修改的因为litteral)字符数组{'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!
答案 1 :(得分:-1)
首先,据我所知,这是不可能的。 我也问过我的教授,他告诉我,我们不能这样做,实际上你也不知道存储在任何特定地址的数据类型。 很抱歉,这样就无法访问数据了。