使用wchar_t时,为什么两个具有相同内容的字符串不同?

时间:2017-03-08 14:10:54

标签: c++ string wchar-t lpstr

我正在编写一个代码,用于比较LPSTR和wchar_t类型的两个字符串。字符串的内容相同但输出显示字符串不同。下面是完整代码的截图。

#include <iostream>
#include <string.h>
#include <wtypes.h>
using namespace std;
int main(int argc, char** argv) 
{
    LPSTR str1= "Abcdef123456";
    wchar_t *str2 = L"Abcdef123456";
    if(!strcmp((char *)str1, (char *)str2))
    {
        cout<<"same";   
    }
    else
    {
            cout<<"diff";
    }

    return 0;
}

执行时,输出为diff。我认为输出应该是相同的。请帮忙。

1 个答案:

答案 0 :(得分:1)

L'A'在内存中的表示形式与'A'不同。如果您假装wchar_t数组是char数组(通过显式转换char*)并将其与具有不同表示形式的另一个char数组进行比较,则会进行比较不同。

输出符合预期。

比较字符串的正确方法是将窄字符串转换为宽字符串。这不是正确的做法,所以这是一个例子:

auto length = std::strlen(str1);
std::wstring temp(length, L'\0');
std::mbstowcs(&temp[0], str1, length);
if (!wcscmp(temp.c_str(), str2))
   // ...