https://nrk.neocities.org/articles/not-a-fan-of-strlcpy
作者讨论了 strcpy 的变体 strlcpy,并认为这个变体没有使用的意义。
他们都是把字符串拷贝到另一个位置的函数,strcpy 因为不限制目标位置的长度,容易产
生缓冲区溢出,因此被很多人认为是不安全的。strlcpy 则改进了这种行为,通过传入目标
位置字符串的长度来限制缓冲区溢出。
但本文作者通过分三种情况讨论,认为 strlcpy 没有合适的应用场景。
如果使用场景允许字符串截断,应该使用 memccpy 配合手动设置字符串尾,这比 strlcpy
更高效。
如果使用场景不允许字符串截断,那应该使用 strdup。
如果不允许字符串截断,但是又只能使用定长缓冲区,也应该像第一种情况一样要使用
memccpy。而且,这比第一种情况下,strlcpy 还要低效,甚至是逻辑混乱的。
评论
从这些分析看来,strcpy 本身也是一种不合理的设计。错误发生时的处理,不
只是错误处理需求本身决定的,还是产生错误的需求决定的。错误处理很大程度上是需求的
一部分,而不是需求的副产物。