为什么使用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' ');
std::mbstowcs(&temp[0], str1, length);
if (!wcscmp(temp.c_str(), str2))
// ...
相关文章:
- 两个字符串在 c++ 中不相等
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 比较两个字符串后卡在无限循环中
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 我需要帮助在一个类中输入两个字符串并获取其输出
- 两个字符串之间的数学运算
- sscanf() 有两个字符串参数
- 我的字符串数组一次打印出前两个字符串
- 两个 c++ 字符串上的异或
- 函数返回两个字符串的第一个常用字符
- 目标是找到两个 c 字符串之间的公共前缀(必须使用特定的函数标头)
- 我需要在C++的两个字符串之间找到共同的前缀
- 我有一个返回字符串向量的函数.它需要两个字符串,并且返回一个字符串中缺少的字符串
- 给定两个字符串 S 和 T.确定与 T 相差最小的 S 子字符串?
- gtest:检查字符串是否等于两个字符串之一
- 交换两个字符串时访问正确的内存时,我遇到了分段错误
- 我可以在系统()中使用两个字符串吗?