You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本文件读取内存地址并获取对应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;
}

关键修改说明:

  1. 调用address.c_str()将std::string转换为const char*,满足strtoul的参数要求,解决类型转换报错。
  2. 使用reinterpret_cast<double*>(addr_val)将数值形式的地址转换为double*指针,这是C++中用于指针类型转换的标准方式。
  3. 解引用double*指针,得到存储在该地址的double值并输出。

注意:这种操作存在风险,如果读取的地址不是有效的double变量内存地址,解引用会触发未定义行为(比如程序崩溃),请确保地址来源可靠。

内容的提问来源于stack exchange,提问作者NoRainDropsInTheSky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 22:57:15