c++ - How to compare a wstring with a _T("some String")? -


i have functionwstring a2t(const string& str) convert string wstring. cannot correct value when compare return value const wstring. example;

wstring stron = a2t("on");  if ( stron == _t("on"))   {      setitemswitch(true);   }  else  {      setitemswitch(false);  } 

the if(stron == _t("on")) statement false. wrong code?

this a2t:

std::wstring a2t(const string& str) {     if (str.empty()) return std::wstring();     int sz = multibytetowidechar(cp_utf8, 0, str.c_str(), -1, 0, 0);      std::wstring res(sz, 0);     multibytetowidechar(cp_utf8, 0, &str[0], -1, &res[0], sz);     return res; } 

the issue in interpretation (or use of) of return value first call multibytetowidechar - return size required buffer including terminating null character. when creating wide string, count null should removed size, string add internally.

in addition, on second call, use actual sizes of strings; avoid multibytetowidechar processing buffer including terminating null characters (their presence catered in string size calculations). again, strings manage null internally.

std::wstring a2t(const std::string& str) {     if (str.empty())         return std::wstring();     int sz = multibytetowidechar(cp_utf8, 0, str.c_str(), -1, 0, 0);      std::wstring res(sz - 1, 0);     //                  ^^^ count "remove" null     multibytetowidechar(cp_utf8, 0, &str[0], str.size(), &res[0], res.size());     //                                       ^^^ use actual sizes     return res; } 

depending on version of compiler being used, investigate use of std::basic_string::data res.data() on use of &res[0].


Comments

Popular posts from this blog

Spring Boot + JPA + Hibernate: Unable to locate persister -

go - Golang: panic: runtime error: invalid memory address or nil pointer dereference using bufio.Scanner -

c - double free or corruption (fasttop) -