c++ - 添加两个 LPCWSTR 变量

标签 c++ concatenation lpcwstr

我正在尝试添加两个 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/

相关文章:

c# - 为什么连接 SQL 字符串不是一个好主意?

c++ - 通过 LevelDB 将 Protocol Buffer 序列化数据从 C++ 传递到 Python

c++ - 更快地近似数组的倒数平方根

javascript - 连接 Javascript 函数的参数名称

c++ - 将 LPCWSTR 字符串打印到文件

c++ - 调用 "SetDllDirectory"时表达式: string iterators incompatiable,

c++ - OOLua链接错误

c++ - 如何在 C++ 中模拟覆盖父函数(不隐藏)?

javascript - 正则表达式组 javascript 上的算术运算