可视C++消息框中函数的显示地址



我正在尝试在消息框中显示函数的内存地址,但它没有按我想要的方式显示它。

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

我查看了此示例,并尝试先在 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;
}

但是,这些消息框显示非常大的数字,并且它们似乎为空。

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

提前谢谢。

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

  1. 我正在使用std::cout而不是snprintf打印。
  2. 我正在通过std::stringstream将指针地址转换为std::string。这对您的MessageBox应该没有问题。
  3. 我将函数签名更改为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]

最新更新