我正在尝试添加两个 LPCWSTR 变量,如下所示
Shader = L"shader.fx"
Path = L"Source/Shaders/"
return Path + Shader
我尝试了一千种不同的方法,但我最新的是这个
LPCWSTR ShaderFile = GetShader(L"shader.fx");
....
LPCWSTR GetShader(std::wstring _Shader)
{
std::wstring ShaderPath = static_cast<std::wstring>(SHADER_DIRECTORY) + _Shader;
LPCWSTR Return = ShaderPath.c_str();
return Return;
}
现在,当我在返回值上设置断点时,该值看起来很好,返回值 = Source/Shaders/shader.fx 正如预期的那样。但是当我按 F10 返回对象时,ShaderFile 变量变成了完全随机的东西,一堆看起来像阿拉伯符号的东西。
有人能给我指出正确的方向吗?正如我所说,该函数似乎工作正常,只是当我通过断点 F10 返回到我的项目时,变量等于完全不同的东西
最佳答案
发生的情况是,您正在返回一个因返回而无效的数据地址,因此在函数返回之前一切看起来都很好,但在结果之后立即,这一切(至少可能)都是垃圾。
如果可能的话,只需返回std::wstring
,然后在调用代码中的某处调用它的c_str()
成员函数,当你真正需要它时原始缓冲区的形式。
如果您无法做到这一点,并且必须将结果作为原始LPCWSTR
返回,那么您可能必须动态分配空间:
LPCWSTR *ret = new char [ShaderPath.size()];
strcpy(ret, ShaderPath.c_str());
return ret;
然后,当不再需要内存时,调用代码将需要删除[]
内存。
您确实想要避免后者,并且只返回一个std::wstring
。它更简单、更干净,并且可以避免在使用完缓冲区之前删除缓冲区,或者在使用完缓冲区后忘记删除它等几乎不可避免的问题(在 C 中仍然是严重的问题,但在 C 中基本上是闻所未闻的)编写得体的 C++)。
关于c++ - 添加两个 LPCWSTR 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19487155/