Описание тега strlcpy
strlcpy
популярный strcpy
замена, происходящая из OpenBSD, где она доступна в<string.h>
стандартный заголовок. В других системах это доступно через libbsd
. Многие проекты имеют индивидуальную реализациюstrlcpy
, включая ядро Linux.
В отличие от strncpy
, он всегда завершает строку, и если буфер длиннее, чем необходимо, он не тратит время на перезапись лишнего места нулями.
Википедия говорит:
Самая популярная [по данным поиска GitHub] замена [из
strcpy
а такжеstrcat
] являютсяstrlcat
а такжеstrlcpy
функции, которые появились в OpenBSD 2.4 в декабре 1998 года. Эти функции всегда записывают один NUL в целевой буфер, усекая результат, если необходимо, и возвращают размер буфера, который может потребоваться, что позволяет обнаруживать усечение и предоставляет размер для создания нового буфера, который не будет усекаться. Их критиковали за якобы неэффективность и за поощрение использования строк C (вместо какой-то более совершенной альтернативной формы строки). Следовательно, они не были включены в библиотеку GNU C (используемую программным обеспечением в Linux), хотя они реализованы в библиотеках C для OpenBSD, FreeBSD, NetBSD, Solaris, OS X и QNX, а также в альтернативных библиотеках C. для Linux, например musl. Отсутствие поддержки библиотеки GNU C не помешало различным авторам программного обеспечения использовать ее и объединить замену,среди прочего SDL, GLib, ffmpeg, rsync и даже внутри ядра Linux. Доступны реализации с открытым исходным кодом для этих функций.
Связанные теги
Источники
-
strlcpy(3)
Справочная страница OpenBSD - Реализация OpenBSD
strlcpy
а такжеstring.h
-
src/strlcpy.c
в libbsd -
lib/string.c
в Linux - Статья Википедии Обработка строк C, § Замены
- Викиучебник Программирование на C, § Справочник по C / нестандартные / strlcpy