-3

我正在编写一个用于比较 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。我认为输出应该相同。请帮忙。

4

1 回答 1

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))
   // ...
于 2017-03-08T14:35:31.420 回答