据我了解,strcmp()
(没有“n”)在任一参数中看到空字符后,会立即停止处理并返回结果。
因此,如果 100% 确定其中一个参数是空终止的(例如,它是一个字符串文字),那么使用(with 'n')和strncmp()
调用strlen()
参数将比较限制为已知字符串长度,因为strcmp()
将永远不会读取比该已知终止字符串中更多的字符。
事实上,在我看来,strncmp()
其长度参数是strlen()
前两个参数之一的调用与这种情况的不同之处在于,它通过评估表达式strcmp()
来浪费与已知终止字符串的大小成线性关系的时间。strlen()
考虑:
示例代码 A:
if (strcmp(user_input, "status") == 0)
reply_with_status();
示例代码 B:
if (strncmp(user_input, "status", strlen("status")+1) == 0)
reply_with_status();
前者比后者有什么好处吗?因为我经常在其他人的代码中看到它。
我对这些功能的工作原理有错误的理解吗?