【发布时间】:2014-07-28 05:35:20
【问题描述】:
以下哪个更有效:
if (strcmp(str1,str2) != 0) {
...
}
或
if (str1[0]!=str2[0] && strcmp(str1,str2) !=0 ) {
...
}
如果str2 总是唯一的并且可以有多个str1。
【问题讨论】:
-
你会检查
*s1==*s2 && !strcmp(s1+1, s2+1)否则你正在对 [0] 进行冗余检查 -
运行测试并亲自查看。也许您可以向我们提供基准数据。实际上,这完全取决于您拥有的数据类型(有多大)。
-
@tech 你的代码是缓冲区溢出
-
@DavidHeffernan 仅当不知道其中一个字符串的长度大于 0 时,情况并非总是如此。一个典型的用法是将一个变量与一个已知的常量进行比较,即 strcmp("--help",s) 这将是安全的,但如果你要比较 2 个 variables 那么肯定,是的,它需要一个额外检查空字符串
!(*s1|*s2)/*true 如果两个字符串都为空*/ 我过去曾对此进行基准测试,以对已排序的常量进行大型二进制搜索;在非典型场景中,额外的第一个字符比较将性能提高了约 10%。