【发布时间】:2013-01-30 20:31:48
【问题描述】:
据我了解,strcmp()(没有“n”)在任一参数中看到空字符后,会立即停止处理并返回结果。
因此,如果 100% 确定其中一个参数是空终止的(例如,它是一个字符串文字),那么在调用 @987654323 时使用 strncmp()(带有 'n')并没有任何安全优势@ 作为第三个参数的一部分,以限制与已知字符串长度的比较,因为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();
前者比后者有什么好处吗?因为我在其他人的代码中看到了很多很多。
我对这些函数的工作原理有错误的理解吗?
【问题讨论】:
标签: c buffer-overflow strcmp strncmp