为什么使用 wchar_t 时两个内容相同的字符串不同?
Why are two strings with same content different while using 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;
}
执行后,输出是不同的。我认为输出应该是相同的。请帮忙。
L'A'
在内存中的表示与 'A'
不同。如果你假装 wchar_t
的数组是 char
的数组(通过显式转换 char*
)并将其与另一个具有不同表示的 char
数组进行比较,它们将比较不同。
输出符合预期。
比较字符串的正确方法是将窄字符串转换为宽字符串。正确地做到这一点并不是微不足道的,所以这里有一个例子:
auto length = std::strlen(str1);
std::wstring temp(length, L'[=10=]');
std::mbstowcs(&temp[0], str1, length);
if (!wcscmp(temp.c_str(), str2))
// ...
我正在编写代码来比较 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'[=10=]');
std::mbstowcs(&temp[0], str1, length);
if (!wcscmp(temp.c_str(), str2))
// ...