似乎strncmp
通常比strcmp
更值得推荐,有什么优势?我认为这可能与安全有关。如果是这种情况,如果已知输入字符串之一是文字常量(如 "LiteralString"
),它是否仍然适用?
更新:
我的意思是在需要比较整个字符串的相同用户场景下,strncmp
可以如下使用。我想知道这是否有意义。
strncmp(inputString, "LiternalString", strlen("LiternalString"));
最佳答案
strcmp
的问题在于,有时如果错误地传递的参数不是有效的 C 字符串(意味着 p1 或 p2 未以空字符终止,即不是 NULL-terminated String ),然后,strcmp 继续比较,直到它到达不可访问的内存并崩溃或有时导致意外行为。
使用 strncmp
可以限制搜索,使其不会到达不可访问的内存。
但是,据此,不应得出 strcmp
使用不安全的结论。这两个功能都按照预期的方式运行良好。程序员在使用该函数之前应该阅读 man
页面,并且在将参数传递给此类库函数时必须足够真诚。
您还可以阅读 THIS其中包含一个几乎相似的问题。
关于c - strncmp 相对于 strcmp 的优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30190460/