怎么比较两个WCHAR数组是否相等???

jaher 2006-06-26 01:54:43
WCHAR p[]={'A','B','C','D'};
WCHAR Buffer[]={'A','B','C','D','E'};
怎么比较它们是否相等?

我用strcmp()返回却是0,怎么回事???
...全文
2849 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-06-27
  • 打赏
  • 举报
回复
WCHAR p[]={'A','B','C','D','\0'};
WCHAR Buffer[]={'A','B','C','D','E','\0'};

wcscmp 函数就可以实现你要的功能了....
问题的关键是 数组布等同于参数要求的 字符串,
没有终结字符,后面将是随机连续,
直到出现终结字符,
这样的情况下,能够符合相等基本是布可能的事情 ~
houdy 2006-06-26
  • 打赏
  • 举报
回复
对于组合数据类型,用memcmp()这种bitwise操作的比较函数是非常危险的,因为这里存在alignment和padding的问题。举个例子,加入有这样一个结构体:
struct A {
int i;
}A;
对于两个A结构体的数组,用memcmp来比较他们时候不会出什么问题。当我们在A中加入一个char的数据成员的时候:
struct AA {
int i;
char c;
}AA;
我们还是用memcmp来比较两个数组的时候,问题就出来了。由于要考虑对齐的问题,编译器会在结构体AA中填充3个额外的字节,这样sizeof(AA) = 8符合对齐的要求。由于填充的那三个字节在运行时是垃圾字节,他们的值是不确定的,所以在memcmp比较数组的时候,即使是数组中所有的元素都相当,用memcmp比较的接过很有可能不相等。
所以我觉得,最保险和最可靠的方法就是专门写一个函数来比较组合数据类型的数据。在C++中,我们可以重载operator = 来完成。
bruceteen 2006-06-26
  • 打赏
  • 举报
回复 1
无论是strcmp,还是wcscmp都不行,这两个函数要求参数是字符串,而p和Buffer只是字符数组,而不是字符串。

size_t len1 = sizeof(p)/sizeof(p[0]);
size_t len2 = sizeof(Buffer)/sizeof(p[Buffer]);
return len1==len2 && memcmp(p,Buffer,len1)==0;
rexking0 2006-06-26
  • 打赏
  • 举报
回复
请用wcscmp函数,你的字符串是宽字符串,要用宽字符串的函数来比较。

70,036

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧