据我理解,
因此,如果其中一个参数被100%确定为以空字符结尾(例如字符串字面量),那么使用
实际上,我觉得调用
考虑以下示例代码A:
strcmp()
(没有'n') 一旦在任意一个参数中看到空字符,就会立即停止处理并返回结果。因此,如果其中一个参数被100%确定为以空字符结尾(例如字符串字面量),那么使用
strncmp()
(带有'n')并调用strlen()
作为第三个参数来限制比较到已知字符串长度,将不会有任何安全优势,因为strcmp()
永远不会读取比该已知终止字符串中更多的字符。实际上,我觉得调用
strncmp()
时,其长度参数是第一/二个参数中strlen()
的区别仅在于它通过计算strlen()
表达式浪费了与已知终止字符串大小成线性的时间。考虑以下示例代码A:
if (strcmp(user_input, "status") == 0)
reply_with_status();
样例代码B:
if (strncmp(user_input, "status", strlen("status")+1) == 0)
reply_with_status();
前者比后者有什么优势吗?因为我在其他人的代码中看到它反复出现。
我是否对这些函数的工作方式有误解?
strlen("status")
计算为常量值。否则,请同意。 - artless noise