获取指针的地址并将其转换为wxString

Getting the address of a pointer and convert it in a wxString

本文关键字:转换 wxString 指针 地址 获取      更新时间:2023-10-16

我正在尝试将指针的地址转换为wxWidgets库的wxString。

我有一本书,它提供了一个基于控制台的示例来解释C++中的输入/输出流系统。在这里,我们可以使用打印一些指针的地址,而不会出现太多复杂情况

const char *const variable = "again";
cout << static_cast<void*>(variable);

到目前为止,我可以理解这个例子,但(现在是复杂的)我想从这些例子中制作一些GUI来训练自己,并在书中探索wxWidgets类。我已经成功地用wxAny类的As()方法进行了一些转换,甚至在没有警告或错误的情况下编译了它。但在执行时,我在尝试转换类型时会遇到"断言失败"。

如果我让程序继续,它会打印在我的wxTextCtrl中,比如:

ﻌ̎X(

有什么想法吗??(顺便说一句,我在Windows7系统中使用CodeBlocks与Mingw32和wxWidgets 3.0)这是导致断言失败的代码:

void ConsoleFrame::OnbtnFrase2Click(wxCommandEvent& event)
{
string chaine2("Value of the pointer: ");
void* puntero = &chaine2;
wxAny anyThing= puntero;
consoleText->AppendText(anyThing.As<wxString>());
}

这就是给我断言失败错误的方法。感谢@Grady之前更正了代码。似乎我无法将void*转换为wxString。我有可能是什么问题的要点,但是,我找不到在文本控件(而不是控制台屏幕)中打印指针地址的原始问题的解决方案

在C++中执行所需操作的常用方法是使用std::stringstream(需要#include <sstream>)。然后你的函数体看起来是这样的:

string chaine2("Value of the pointer: ");
void* puntero = &chaine2;
stringstream tmpss;
tmpss << chaine2 << puntero;
consoleText->AppendText(tmpss.str());

如果您只想得到一个包含输出到该流的所有内容的wxString,您只需执行以下操作:

wxString mystr = tmpss.str();

我不知道你的问题与wxWidgets有什么关系,但这对我有用:

const char * dog = "dog";
std::cout << &dog;

我不是C++专家。。但对我来说,这看起来像是"可变狗的输出地址"

如果你想把它作为一个字符串,你可以使用C++字符串流,或者只使用旧的C sprintf

char * addrString = (char *)malloc(sizeof(void *) * 2 + 3); //  *2 bytes for hex rep, +3 for "0x" and null
sprintf(addrString, "%p",dog);

指针的地址和指针的内容之间存在差异,尤其是C样式(以nul结尾的字符序列)。

例如:

const char * const text = "Some Textn";  

变量text是指向字符串文字的指针。指针的内容是字符串文字所在的位置;通常称为地址

表达式&text表示指针的位置或地址。因此,如果指针位于地址0x4000,则表达式&text将返回0x4000;而不是指针的内容。

StackOverflow上有一些示例用于打印变量的地址以及C样式字符串的内容。

那么,您想要一个包含指针地址的wxString还是指针指向的字符串文字?

终于!!

我的问题的答案在这里:

http://docs.wxwidgets.org/trunk/classwx_text_ctrl.html

这是文本控件的文档。我只需要用将输出流重定向到文本控件

wxStreamToTextRedirector redirect(myTextControl);

现在我正常使用cout对象,

cout<<puntero;

并且输出将显示在文本控件中而不是控制台屏幕中。我无法创建包含地址的wxString,但到目前为止,这至少可以显示它。我知道从现在起,我可以从文本控件的内容和它的成员函数创建一个字符串。如果你们中有人有更好的答案,我很乐意接受。有趣的是,这本书中我所在的章节是断断续续的,而我的问题的解决方案却没有出现在书中。