gpt4 book ai didi

c++ - wstring::c_str() 包含垃圾

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:53 29 4
gpt4 key购买 nike

我有一个 std::wstring decode(const char *s) 函数。

我是这样使用的:

const char *src = "some string";
const wchar_t *result = decode(src).c_str();

我总是在 result[0] 中得到垃圾,有时在 result[1] 中也是如此。

当我以另一种方式使用它时,我不会得到垃圾:

std::wstring res = decode(src);
const wchar_t *result = res.c_str();

我的 decode 函数定义如下,它完成了它的工作。唯一的问题是调用代码(上面)。

std::wstring decode(const char *s, UINT cp=CP_ACP)
{
if(s == NULL)
return std::wstring();
int length = ::MultiByteToWideChar(cp, 0, s, -1, NULL, 0 );
wchar_t *buf = new wchar_t[length];
::MultiByteToWideChar(cp, 0, s, -1, buf, length);
std::wstring r(buf);
delete[] buf;
return r;
}

我使用Visual C++ 2008 SP1编译。

最佳答案

const wchar_t *result = decode(src).c_str();

decode 的返回值是一个临时值,在调用c_str() 后被销毁。因此 result 指向释放的内存。

所以要么

  • 延长返回值的生命周期(例如,将其分配给局部变量)
  • 复制结果

关于c++ - wstring::c_str() 包含垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26304239/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com