C++ 比较char*和wchar\t类型的C字符串*

C++ 比较char*和wchar\t类型的C字符串*,c++,pointers,wchar-t,wchar,C++,Pointers,Wchar T,Wchar,我有一个键像: wchar_t key[] = L"764frtfg88fgt320nolmo098vfr"; 以及从数据库查询返回的char*row[i] 我想将我的键与行[I]进行比较。我试过了 wcscmp (key,row[i]) != 0) 但这给了我一个错误。有什么建议吗?这可能会有帮助: 作为总结: #include <string> wchar_t Key[] = L"764frtfg88fgt320nolmo098vfr"; std::wstring k(K

我有一个
像:

wchar_t key[] = L"764frtfg88fgt320nolmo098vfr"; 
以及从数据库查询返回的
char*row[i]

我想将我的
行[I]
进行比较。我试过了

wcscmp (key,row[i]) != 0)
但这给了我一个错误。有什么建议吗?

这可能会有帮助:

作为总结:

#include <string>

wchar_t Key[] = L"764frtfg88fgt320nolmo098vfr";
std::wstring k(Key);

const char* text = "test"; // your row[i]
std::string t(text);
// only works well if the string being converted contains only ASCII characters.
std::wstring a(t.begin(), t.end()); 

if(a.compare(k) == 0)
{   
    std::cout << "same" << std::endl;
}
#包括
wchar_t Key[]=L“764frtfg88fgt320nolmo098vfr”;
std::wstring k(键);
const char*text=“测试”//你的那排[我]
std::字符串t(文本);
//仅当正在转换的字符串仅包含ASCII字符时才能正常工作。
std::wstring a(t.begin(),t.end());
如果(a.比较(k)==0)
{   
STD::CUT< P>我会使用C++工具:

#include <iostream>
#include <string>

// construct a wstring from a string
std::wstring to_wstring(std::string const& str)
{
    const size_t len = ::mbstowcs(nullptr, &str[0], 0);
    if (len == size_t(-1)) {
        throw std::runtime_error("to_wstring()");
    }
    std::wstring result(len, 0);
    ::mbstowcs(&result[0], &str[0], result.size());
    return result;
}


//
// TEST CASES ---
//
const wchar_t key[] = L"764frtfg88fgt320nolmo098vfr"; 
const auto wkey = std::wstring(key);

bool operator==(std::string const& lhs, std::wstring const& rhs)
{
    return to_wstring(lhs) == rhs;
}
bool operator==(std::wstring const& lhs, std::string const& rhs) { return rhs == lhs; }

int main() {
    std::cout << std::boolalpha << ("hello" == wkey) << "\n"
                                << (wkey == "764frtfg88fgt320nolmo098vfr") << "\n";
}

它的优点是在*nix和windows上都可以使用非ASCII字符。

已经有了其他答案,但您也可以像这样将char*转换为wchat\t*

声明如下:

const wchar_t *GetWC(const char *c)
{
    const size_t cSize = strlen(c)+1;
    wchar_t* wc = new wchar_t[cSize];
    mbstowcs (wc, c, cSize);

    return wc;
}
然后像这样使用它:

wchar_t * temprow;
temprow = (wchar_t *)GetWC(row[i]);

/* replace following line with your own */
std::cout << "i " << i << " is " << (wcscmp (key,temprow) != 0) << "\n";

/* avoid memory leak */
free(temprow);
wchar\u t*temprow;
temprow=(wchar_t*)GetWC(第[i]行);
/*用您自己的代码替换下面的代码行*/

std::cout哪个错误?寻求调试帮助的问题(“为什么这段代码不工作?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现该问题所需的最短代码。没有明确问题说明的问题对其他读者没有用处。请参阅:如何创建问题。错误为:错误C2664:“wcscmp”:无法将参数1从“char*”转换为“const wchar\u t*”,以帮助他人回答您的问题,您需要更具体地说明错误。请在您的帖子中加入您从您的邮箱中获得的确切错误(最好使用复制+粘贴以避免转录错误)。
wchar_t * temprow;
temprow = (wchar_t *)GetWC(row[i]);

/* replace following line with your own */
std::cout << "i " << i << " is " << (wcscmp (key,temprow) != 0) << "\n";

/* avoid memory leak */
free(temprow);