使用用户输入的十六进制值读取 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!
目的是让用户输入内存地址(十六进制)并打印出地址的内容。
摩托罗拉 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!