10

说我有一个对象

MyObj stuff;

要获取东西的地址,我会打印

cout << &stuff << endl; 0x22ff68

我想将 0x22ff68 保存在一个字符串中。我知道你不能这样做:

string cheeseburger = (string) &stuff;

有没有办法做到这一点?

4

3 回答 3

8

您可以使用std::ostringstream。另请参阅此问题

但是不要指望你必须的地址真的很有意义。使用相同数据的同一程序的一次运行到下一次运行可能会有所不同(因为地址空间布局随机化等)

于 2012-04-10T15:44:12.923 回答
7

这是一种将指针的地址保存为字符串,然后将地址转换回指针的方法。我这样做是为了证明const没有真正提供任何保护的概念,但我认为它很好地回答了这个问题。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

int main()
{
    // create pointer to int on heap
    const int *x = new int(5);
        // *x = 3; - this fails because it's constant

    // save address as a string 
    // ======== this part directly answers your question =========
    ostringstream get_the_address; 
    get_the_address << x;
    string address =  get_the_address.str(); 

    // convert address to base 16
    int hex_address = stoi(address, 0, 16);

    // make a new pointer 
    int * new_pointer = (int *) hex_address;

    // can now change value of x 
    *new_pointer = 3;

    return 0;
}
于 2019-02-10T21:19:03.840 回答
4

您可以尝试使用字符串格式

字符 strAddress[] = "0x00000000"; // 注意:你应该分配正确的大小,这里我假设你使用的是 32 位地址

sprintf(strAddress, "0x%x", &stuff);

然后你使用普通的字符串构造函数从这个 char 数组创建你的字符串

于 2012-04-10T15:48:21.173 回答