C++ 在 MessageBox 中显示一个函数的地址

C++ display address of a function in a MessageBox

我试图在 MessageBox 中显示一个函数的内存地址,但它没有按我想要的那样显示。

我想将一个回调函数的函数地址传递给另一个函数,所以我试图获取它的地址。

我查看了 示例并尝试先在 MessageBox 中显示它,而不是在使用它之前打印到控制台。

我是如何尝试的:

char ** fun()
{
    static char * z = (char*)"Merry Christmas :)";
    return &z;
}
int main()
{
    char ** ptr = NULL;

    char ** (*fun_ptr)(); //declaration of pointer to the function
    fun_ptr = &fun;

    ptr = fun();

    char C[256];

    snprintf(C, sizeof(C), "\n %s \n Address of function: [%p]", *ptr, fun_ptr);
    MessageBoxA(nullptr, C, "Hello World!", MB_ICONINFORMATION);

    snprintf(C, sizeof(C), "\n Address of first variable created in fun() = [%p]", (void*)ptr);
    MessageBoxA(nullptr, C, "Hello World!", MB_ICONINFORMATION);

    return 0;
}

但是,这些消息框显示的数字非常大,而且看起来是空的。

我喜欢在消息框中显示它们,就像在链接 post 的示例输出中一样。

提前致谢。

我对代码做了一些修改,使其更 c++-y,现在它似乎可以工作了:

  1. 我正在使用 std::cout 打印而不是 snprintf
  2. 我正在通过 std::stringstream 将指针地址转换为 std::string。这对您的 MessageBox.
  3. 应该没有问题
  4. 我将函数签名更改为 const char** 以避免任何问题。

最终代码:

#include <iostream>
#include <sstream>

const char** fun()
{
    static const char* z = "Merry Christmas :)";
    return &z;
}
int main()
{
    const char** (*fun_ptr)() = fun; 
    const char** ptr = fun();

    std::cout << "Address of function: [" << (void*)fun_ptr  << "]" << std::endl;
    std::cout << "Address of first variable created in fun() = [" << (void*)ptr  << "]" << std::endl;

    std::stringstream ss;
    ss << (void*)fun_ptr;
    std::cout << "Address as std::string = [" << ss.str() << "]" << std::endl;

    return 0;
}

输出:

Address of function: [0x106621520]
Address of first variable created in fun() = [0x1066261b0]
Address as std::string = [0x106621520]