C中字符串的库函数strncpy没有以NULL结尾

发布于 2022-09-03 00:38:16 字数 127 浏览 16 评论 0

对于长度受限的字符串函数 strncpy strncat
strncat在结尾字符串后面添加一个NULL,而strncpy却没有
为什么会这样,明显strncpy添加一个NULL会预防溢出,函数的鲁棒性会提高,并且也没什么坏处

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城旧梦 2022-09-10 00:38:16

C库有很多实现,不同平台/工具都有自己的实现
strncpy 函数的实现已经成了标准,如果新库实现跟以往不一样,
会使用户疑惑(加0使得实际拷贝字符数可能为n-1,与预期不符)!
而且有时候利用strncpy的非0结束特性来连接数组
——不建议这样用,但并不是没人这样用,特别是老的开源库

至于历史原因:

The strncpy() function was designed with a very particular problem in mind: manipulating strings stored in the manner of original UNIX directory entries. These used a fixed sized array, and a nul-terminator was only used if the filename was shorter than the array.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文