如何从文本文件读取内存地址并获取对应double类型变量的值?
问题解决:读取内存地址并解引用获取double值
你的代码存在两个关键问题,分别导致编译报错和逻辑错误:
strtoul函数要求第一个参数是const char*类型,你传入的std::string对象无法直接转换,需调用c_str()方法获取C风格字符串指针。strtoul返回的是unsigned long数值,直接解引用这个数值是非法的,必须先将其转换为double*类型的指针,再解引用才能拿到对应的double值。
修正后的完整代码如下:
#include <iostream> #include <fstream> #include <string> #include <cstdlib> int main() { std::fstream temp; temp.open("temp.txt"); std::string address; getline(temp, address); temp.close(); // 将字符串地址转为unsigned long,再强制转换为double*指针 unsigned long addr_val = strtoul(address.c_str(), NULL, 16); double* ptr = reinterpret_cast<double*>(addr_val); // 解引用指针获取double值 std::cout << *ptr << std::endl; return 0; }
关键修改说明:
- 调用
address.c_str()将std::string转换为const char*,满足strtoul的参数要求,解决类型转换报错。 - 使用
reinterpret_cast<double*>(addr_val)将数值形式的地址转换为double*指针,这是C++中用于指针类型转换的标准方式。 - 解引用
double*指针,得到存储在该地址的double值并输出。
注意:这种操作存在风险,如果读取的地址不是有效的double变量内存地址,解引用会触发未定义行为(比如程序崩溃),请确保地址来源可靠。
内容的提问来源于stack exchange,提问作者NoRainDropsInTheSky
相关产品推荐
相关产品推荐

