【发布时间】:2018-08-09 04:04:01
【问题描述】:
我刚刚创建了这个函数来检查两个字符串之间的相等性,方法是减去它们的整数值
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() 比我之前使用的任何其他标准函数快
所以我真的喜欢使用它
我在其他机器上对其进行了测试,它工作,但 char* 的整数值不同,也
注意到这些整数取决于代码中首先声明的变量,但如果它们具有 same 字符串,则它是 same 整数,这使得这个函数完美运行,那么它是否依赖于编译器?
为什么不同整数?,它仍然安全吗?
编辑:一些答案侧重于调试我的第二个示例,而不是回答我的问题,因此我对其进行了编辑。
【问题讨论】:
-
你工作太辛苦了
strcmp是你需要的。而且你的两个功能都被窃听了。EQA检查CString1是否是CString2的前缀,所以例如EQA("", "hello")为真。 -
尝试重写标准函数作为学习练习是可以的,但在实际代码中却不是这样。
-
我在发布此内容之前尝试在 EQA 中检查 strlen(),但出于澄清目的我将其删除。 @john,这不是我原来的,但你是对的,因为我不会在实际代码中使用它们,我试图了解它们是如何工作的
-
请 不要滥用
typography。 -
@Tas 不,这不安全。减去两个不指向同一个数组的指针是未定义的行为。