【发布时间】:2019-02-11 06:53:46
【问题描述】:
我写了一个叫ws2s的函数把wstring转成string:
std::string ws2s(const std::wstring & src)
{
std::string res = "";
size_t const mbs_len = wcstombs(NULL, src.c_str(), 0);
std::vector<char> buffer(mbs_len + 1);
wcstombs(&buffer[0], src.c_str(), buffer.size());
res.assign(buffer.begin(), buffer.end() - 1);
return res;
}
我使用 valgrind 运行内存检查有一些错误。这两种调用函数ws2s的方式有什么区别吗?
第一种方法:
std::string xml_path = ws2s(something);
const char * path = xml_path.c_str();
第二种方法:
const char * path = ws2s(something).c_str();
【问题讨论】:
-
你展示的代码明明是C++,为什么还要加C语言标签?
-
当询问“错误”时,请始终包含实际错误。复制粘贴为文本,完整而完整。并且不要忘记还包括生成错误的minimal reproducible example。请花一些时间阅读有关 how to ask good questions 和 this question checklist 的信息。
-
@Someprogrammerdude valgrind 错误似乎太长,代码有6k行,没人想看。
-
@J.Doe - 你是对的,没有人愿意阅读 6k 行,这就是为什么你被指向 Minimal、完整和可验证的示例页面来学习如何做好一个。
-
@slawekwin 谢谢,这是同一个问题。