主要观点:strlcpy(3)
常被视为strcpy(3)
和strncpy(3)
的更安全替代品,但作者不喜欢它,认为其效率低且并非最佳选择。
关键信息:
strlcpy
存在问题,如src
未以空字符结尾时不安全,且效率不高。- 字符串问题可分为截断重要和不重要两类,截断不重要时
memccpy(3)
更优,截断重要时应动态分配内存使用strdup(3)
或strlen(3)
与memcpy(3)
。 - 若 stuck with a fixed size buffer 且
src
大于缓冲区,应使用memccpy
判断截断。 - 用
mem*
函数处理字符串并非错误,memccpy(3)
和strdup(3)
已被接受进入 C2x 草案。
重要细节: - 严格来说,根据 C 标准,字符串是以空字符终止的连续字符序列,“null-terminated string”这一术语冗余。
- 在截断不重要的情况下,
strlcpy
效率低,strncpy
也有问题,memccpy
更合适。 - 在截断重要且需动态分配内存的情况下,
strdup
或strlen(3)
与memcpy(3)
更优。 - 对于 stuck with a fixed size buffer 的情况,
memccpy
比strlcpy
更高效且更符合逻辑。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。