我正在编写一个代码,用于比较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。我认为输出应该是相同的。请帮忙。
答案 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))
// ...