在 C 中比较以空字符结尾的字符串和非以空字符结尾的字符串

标签 c string messagepack

我使用的反序列化库 (messagepack) 不提供以 null 结尾的字符串。相反,我得到一个指向字符串开头的指针和一个长度。将此字符串与普通的以 null 结尾的字符串进行比较的最快方法是什么?

最佳答案

最快的方法是 strncmp() 限制要比较的长度。

 if (strncmp(sa, sb, length)==0)  
    ...

然而,这假定您使用的长度是两个字符串的最大长度。如果以 null 结尾的字符串可能有更大的长度,您首先必须比较长度。

 if(strncmp(sa,sb, length)==0 && strlen(sa)<=length) // sa being the null terminated one
     ...

请注意,比较后会特意检查 strlen(),以避免在第一个字符甚至不匹配时不必要地遍历空终止字符串的所有字符。

最后一个变体是:

 if(strncmp(sa,sb, length)==0 && sa[length]==0) // sa being the null terminated one
     ...

关于在 C 中比较以空字符结尾的字符串和非以空字符结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28997095/

相关文章:

c - 为什么使用 ioctl 在内核模块中会收到此编译警告?

c - 我怎样才能让这个程序更快?

c++ - 使用 for_each 和 istream_iterator 遍历 C++ 中的文本文件以查找文件名

c - 循环跳过 C 中的第二个输入

string - shell脚本中字符串比较不区分大小写

c++ - 使用 msgpack 通过 zeromq 发送 vector

c - 寻找最小的整数

c - rand() 函数行为

java - 使用 Messagepack 序列化