c - strncmp 相对于 strcmp 的优势?

标签 c c-standard-library

似乎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/

相关文章:

c - 计算文件长度时是否应该检查 fseek() 的返回值?

c - 使用 write 在文件中写入 int 变量

java - 需要有关 jni 代码的帮助(从 native 代码调用 java 方法)

c - 来自/dev/{random,urandom} 的快速并行随机数生成

c - 是否有不需要空终止字符串的 strtol 等价物?

c++ - 哪些 C 结构出现在 std 命名空间中?

c - 保证指向标准函数的指针不相等?

C - 使用 htonl 和 ntohl 编码/取消编码结构

c - 如何交换二进制数中的每 2 位?

c - 联盟重复成员