【发布时间】:2019-07-09 19:52:27
【问题描述】:
我目前正在学习 C 中的字符串,出现了一个问题:为什么 C 开发人员不让 strncpy null 自动终止?
比如strncpy的实现,为什么做C语言的人不加这行:
// dest denotes the destination string
dest[n - 1] = '\0';
为了让 strncpy 更安全?
【问题讨论】:
-
这是一个选择,你也可以问为什么puts添加了最后一个换行符而不是fputs等等
-
不是每个设计决策都有一个能让每个人都满意的解释。有
strlcpyFWIW,但是不标准…… -
因为
strncpy用于您可能不希望以 0 结尾的情况,例如仅覆盖字符串的一部分。 -
您如何确定您无法复制您想要复制的源缓冲区的整个长度?如果目标缓冲区中的最后一个字符不为空,那么您就知道副本不完整。