繁体   English   中英

将未知长度的字符串与已知长度的字符串进行比较

[英]Compare string of unknown length against string of known length

我想将未知长度( s1 )的空终止字符串与已知长度( s2 )的未终止字符串进行比较。

!strncmp(s1, s2, s2_len)接近正确,但如果s2s1的前缀,它也会变为真。

strlen(s1) == s2_len && !strcmp(s1, s2)是正确的,但扫描s1两次。

显然,手动比较字符串也是有效的,但我失去了 C 库在过去四十年中获得的所有闪亮优化。

是否有使用 C 库函数实现此目的的好方法?

if (!strncmp(s1, s2, s2_len) && s1[s2_len] == 0) {...}

如果strncmp()返回零,则s2s1的前缀。

  • 如果s1[s2_len]为 NUL,则字符串相等
  • 如果不是:那么strlen(s1) > s2_len
  • 如果strncmp()返回非零值,则跳过第二个测试(短路评估)

如果strncmp(s1, s2, s2_len)返回0您知道s1至少与s2一样长,因此您只需检查终止符即可排除s2s1前缀的可能性:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM