【发现】我不喜欢_strlcpy

https://nrk.neocities.org/articles/not-a-fan-of-strlcpy

作者讨论了 strcpy 的变体 strlcpy,并认为这个变体没有使用的意义。

他们都是把字符串拷贝到另一个位置的函数,strcpy 因为不限制目标位置的长度,容易产生缓冲区溢出,因此被很多人认为是不安全的。strlcpy 则改进了这种行为,通过传入目标位置字符串的长度来限制缓冲区溢出。

但本文作者通过分三种情况讨论,认为 strlcpy 没有合适的应用场景。

如果使用场景允许字符串截断,应该使用 memccpy 配合手动设置字符串尾,这比 strlcpy 更高效。

如果使用场景不允许字符串截断,那应该使用 strdup。

如果不允许字符串截断,但是又只能使用定长缓冲区,也应该像第一种情况一样要使用 memccpy。而且,这比第一种情况下,strlcpy 还要低效,甚至是逻辑混乱的。

评论

从这些分析看来,strcpy 本身也是一种不合理的设计。错误发生时的处理,不只是错误处理需求本身决定的,还是产生错误的需求决定的。错误处理很大程度上是需求的一部分,而不是需求的副产物。

posted @ 2024-07-18 11:36  plus7wist  阅读(16)  评论(0编辑  收藏  举报