将 void* 转换为 std::string
在仔细阅读网络并搞乱自己之后,我似乎无法将 void* 的目标(这是一个字符串)转换为 std::string 。我尝试过按照 /thread221261.html" rel="noreferrer">此页面 获取 C 字符串,但无济于事。遗憾的是,是的,我必须使用 void*,因为这就是 SDL 在其 USEREVENT 结构中使用的内容。
对于那些感兴趣的人,我用来填充 Userevent 的代码是:
std::string filename = "ResumeButton.png";
SDL_Event button_press;
button_press.type = BUTTON_PRESS;
button_press.user.data1 = &filename;
SDL_PushEvent(&button_press);
有什么想法吗?
编辑:感谢所有回复,我只需要将 void* 转换为 std::string* 。愚蠢的我。非常感谢你们!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您只需要动态分配它(因为它可能需要比您使用它的范围更长),然后来回转换它:
You just need to dynamically allocate it (because it probably needs to outlive the scope you're using it in), then cast it back and forth:
根据您的评论“我的意思是将 void* 指向的内容(这是一个字符串)转换为字符串。”
假设您有这样的情况:
您可以直接转换回字符串:
请注意,您需要验证
ptr
是否确实指向std::string
。如果你弄错了并且它指向其他东西,这将导致未定义的行为。Based on your comment "What I meant was to convert what the void* is pointing to (which is a string) into a string."
Assuming you have this:
You can just cast back to the string:
Note that it is on you to verify that
ptr
actually points to astd::string
. If you are mistaken and it points to something else, this will cause undefined behavior.如果您尝试将地址格式化为文本,则可以使用
stringstream
:如果这不是您感兴趣的内容,请澄清您的问题。
If you trying to format the address as text you can use a
stringstream
:If that's not what you are interested in, please clarify your question.
如果 void 是 const char*,那么您可以用它调用 std::string 构造函数,即
If the void is a const char*, then you can just call the std::string constructor with it, i.e.