【发布时间】:2011-02-21 15:56:30
【问题描述】:
我有什么:
- [wstr1] 1 std::wstring 值(例如“(GMT+04:30) Kabul”)
- [str2] 1 char* 填充了与 std::wstring 相同的数据(文本相同)
我只是想比较这两个值 - 但以下代码似乎不起作用。公里。
这里是从 char* 到 std::wstring 的转换器,
std::wstring TimeZone::TimeZone::char2ws(const char* src)
{
/* Convert to a wchar_t*
* http://msdn.microsoft.com/en-us/library/ms235631(v=vs.80).aspx
*/
// Convert to a wchar_t*
size_t origsize = strlen(src) + 1;
const size_t newsize = 512;
size_t convertedChars = 0;
wchar_t wcstring[newsize];
mbstowcs_s(&convertedChars, wcstring, origsize, src, _TRUNCATE);
return wcstring;
}
之后我做了简单的比较
// wstr1 is std::wstring, with "(GMT+04:30) Kabul" string
// wstr2 = char2ws(str2),
return (wstr1 == wstr2);
没有运气。 VSVC2008 IDE 调试器中的字符串在视觉上是相等的。
问题:为什么 compare 方法总是给我 false?
谢谢。
解决方案:非常感谢Alexandre C.
bool weirdEquals(const std::wstring& str, char const* c)
{
std::string c_str(c);
if (str.size() < c_str.size())
{
return false;
}
return std::equal(c_str.begin(), c_str.end(), str.begin());
}
PS。我做了一些更改。
【问题讨论】:
-
wcstring[] 是栈变量,怎么返回呢?你错过了最后一个'\ 0'吗?为什么不检查来自 mbstowcs_s 的错误代码?
-
他按值返回 std::wstring,而不是对数组的引用。
-
@James “你为什么不检查来自 mbstowcs_s 的错误代码?” Errno 为 0,表示没有错误,对话成功。