Почему две строки с одинаковым содержимым отличаются при использовании wchar_t?

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

-3

Решение

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))
// ...
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]