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

文字列形式を使用してみることができます

char strAddress [] = "0x00000000"; //注:正しいサイズを割り当てる必要があります。ここでは、32ビットアドレスを使用していると想定しています。

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

次に、通常の文字列コンストラクターを使用して、このchar配列から文字列を作成します

于 2012-04-10T15:48:21.173 に答える