c strncpy没有零终止的原因



我目前正在学习C中的字符串,并且出现了一个问题:C开发人员为什么不使strncpy Null自动终止?

例如,在实施strncpy时,为什么没有制作C语言的人添加此行:

// dest denotes the destination string
dest[n - 1] = '';

为了使strncpy更安全?

strncpy从未打算是 strcpy的"安全替代",尽管这是许多新的C程序员获得的印象,因为它确实采用了"大小"参数。第三个参数是要从源缓冲区读取字符数,而不是目标缓冲区的最大容量。

今天,strncpy是将数据从一个缓冲区复制到另一个缓冲区的最佳选择。如果您确实需要strcpy的安全替代方案,则可以使用snprintf这样:

snprintf(dest, len_dest, "%s", src);

这样做,因为您可能只想覆盖句子的第一个单词。

如果您不达到计数,则终止终止。请参阅下面的引文(https://en.cppreference.com/w/c/string/byte/strncpy)

在大多数计数字符数组的字符上复制 src(包括终止零字符,但没有任何一个 遵循null字符的字符)到字符阵列指向的字符 到dest。

只有在终止null字符之前达到计数时才没有终止。您不能以容量添加终止null字符,因为那将超出数组范围。

您可能想查看strlcpy,它将执行您想要的工作,但不是标准库的一部分。

相关内容

  • 没有找到相关文章

最新更新