c – 将long转换为wchar_t *

谢谢阅读.

我认为我很接近这一点,但我可以利用一些专业知识来理解为什么我的某些尝试没有按照我期望的方式进行.

我需要(现在)将一个类型long(LONG,因为我实际上在VC中,但我知道这只是一个typedef)转换为wchar_t *.我能够获得我想要的结果,但我无法理解为什么我认为应该有效的方法……不起作用.这是实现我想要的结果的代码:

const std::wstring myString{ std::to_wstring(wRect.bottom) };
const wchar_t * myCharPointer{ myString.c_str() };

与我想采取的方法:

const wchar_t * lWind{ std::to_wstring(wRect.bottom).c_str() };

在VS社区中使用我的调试器我已经确定myCharPointer指向正确的值(“600”),但是lWind被分配到点(或者可能永远不会得到新的赋值?)到空字符串/空字符串.

我很好奇这两种方法的理论性能方面,即使用2行代码和2种不同类型的变量来得到我想要的值与1行代码.显然,有一些后端代码被调用来执行这些方法,但我不确定一种方法是否比另一种方法的性能更高.

我很感激人们对此有任何反馈;很可能我错过了一些明显的东西,我想要实现的总体目标甚至可能以更好的方式完成,但现在我想满足我的好奇心.谢谢!

最佳答案 to_wstring按值返回wstring.临时对象的析构函数在调用c_str之后被调用,当它在下一行丢失作用域时,然后指针变为无效.

const wchar_t * lWind{ std::to_wstring(wRect.bottom).c_str() }; // after this line invalid pointer

您可以通过存储与wchar_t指针一样长的临时字符串来修复它.

std::wstring ws = std::to_wstring(100);

const wchar_t * lWind{ ws.c_str() };
点赞