我刚刚创建了这个函数来通过减去它们的整数值来检查两个字符串之间的相等性
int EQ(const char* CString1, const char* CString2)
{
return CString1 - CString2 == 0;
}
但是,我不确定这是否是检查char*
字符串的安全方法
它不适用于数组,因为它们有不同的整数,所以我为此创建了其他函数
int EQA(const char* CString1, const char* CString2){
if(CString1 == NULL || CString2 == NULL)
return 0;
int i = strlen(CString1);
if(i != strlen(CString2))
return 0;
while(i>=0){
if(CString1[i] != CString2[i])
return 0;
--i;
}
return 1;
}
我没有尝试过多优化我的第二个功能
但是在检查时char*
,我为什么要使用EQA()
或strcmp()
结束EQ()
?
第一个EQ()是非常快,比我以前使用的任何其他标准功能
所以,我真的很喜欢使用它
我在其他机器上对其进行了测试,它可以工作,但是 Integers 值char*
不同,还
注意到这些整数取决于代码中首先声明的变量,但是如果它们具有相同的字符串,则它是相同的整数,这使得该函数完美运行,所以它不依赖于编译器?
为什么不同的整数?,它仍然安全吗?
编辑:一些答案侧重于调试我的第二个示例而不是回答我的问题,所以我编辑了它。
两个字符串在字典上相等并不意味着它们存储在相同的内存位置。减去它们的地址来比较它们可能会给出一些错误的结果。如果两个指针不指向同一数组的元素或指向数组最后一个元素之后的元素,则指针减法是没有意义的。
我建议使用标准函数strcmp
进行字典字符串比较。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句