Я пишу код для сравнения двух строк типа 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. Я думаю, что вывод должен быть таким же. Пожалуйста помоги.
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))
// ...
Других решений пока нет …