[英]Compare string of unknown length against string of known length
我想将未知长度( s1
)的空终止字符串与已知长度( s2
)的未终止字符串进行比较。
!strncmp(s1, s2, s2_len)
接近正确,但如果s2
是s1
的前缀,它也会变为真。
strlen(s1) == s2_len && !strcmp(s1, s2)
是正确的,但扫描s1
两次。
显然,手动比较字符串也是有效的,但我失去了 C 库在过去四十年中获得的所有闪亮优化。
是否有使用 C 库函数实现此目的的好方法?
if (!strncmp(s1, s2, s2_len) && s1[s2_len] == 0) {...}
如果strncmp()
返回零,则s2
是s1
的前缀。
s1[s2_len]
为 NUL,则字符串相等strlen(s1) > s2_len
strncmp()
返回非零值,则跳过第二个测试(短路评估)如果strncmp(s1, s2, s2_len)
返回0
您知道s1
至少与s2
一样长,因此您只需检查终止符即可排除s2
是s1
前缀的可能性:
if (!strncmp(s1, s2, s2_len) && s1[s2_len] == '\0') {
// ...
}
您可以使用 strncmp 方法并检查s1
的 NUL 终止符:
!strncmp(s1, s2, s2_len) && !s1[s2_len]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.