其目的是允许用户输入内存地址(以十六进制表示),并打印出地址的内容。
代码正在摩托罗拉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 is: dm 40a大小是: userInput数字部分的长度(在本例中为3)
发布于 2018-02-01 15:39:47
你自己就要找到解决办法了。如果将地址输入到char数组中,例如:
char address[16];
printf("Enter address in hexa: ");
scanf("%15", address);并在其中键入40a,address将指向以下字符数组:{ '4', '0', 'a', '\0', ...}终止null后的内容与此无关。与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!发布于 2018-02-01 15:33:21
首先,据我所知,这是不可能的。我还问过我的教授,他告诉我,我们不能这样做,实际上,你也不知道哪种类型的数据存储在任何特定的地址。很抱歉,没有办法通过这种方式访问数据。
https://stackoverflow.com/questions/48566016
复制相似问题