根据我的理解,strcmp()
(没有'n'),在任一参数中看到空字符时,立即停止处理并返回结果.
因此,如果其中一个参数已被100%确定地知道为空终止(例如,它是一个字符串文字),那么使用strncmp()
(带有'n')调用strlen()
作为第三个的一部分没有任何安全性好处将比较限制为已知字符串长度的参数,因为strcmp()
它将永远不会读取比已知终止字符串中更多的字符.
事实上,在我看来,调用strncmp()
其长度参数是strlen()
前两个参数中的一个是唯一的strcmp()
,因为它通过评估strlen()
表达式来浪费时间线性的已知终止字符串的大小.
考虑:
示例代码A:
if (strcmp(user_input, "status") == 0)
reply_with_status();
Run Code Online (Sandbox Code Playgroud)
示例代码B:
if (strncmp(user_input, "status", strlen("status")+1) == 0)
reply_with_status();
Run Code Online (Sandbox Code Playgroud)
前者对后者有什么好处?因为我在其他人的代码中看到了很多.
我对这些功能的工作原理有缺陷吗?