为什么使用WCHAR_T时,两个字符串不同

Why are two strings with same content different while using wchar_t?

本文关键字:两个 字符串 WCHAR 为什么      更新时间:2023-10-16

我正在编写一个代码,用于比较两个类型的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;
}

执行后,输出为差异。我认为输出应该相同。请帮忙。

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

输出是预期的。


比较字符串的正确方法是将窄字符串转换为宽字符串。这不是正确地做的完全微不足道,因此这是一个例子:

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