Описание тега strlcpy

Нестандартная функция C, происходящая из OpenBSD: `strlcpy` копирует строку с завершающим нулем в неперекрывающийся буфер размера` n`. Возвращает исходную длину `s` (исключая завершающий \0). За исключением случаев `n` == 0, строка назначения всегда заканчивается нулем. Если `s` + 1 > `n`, целевая копия усекается. Используйте этот тег для вопросов об использовании функции, реализации и связи с другими строковыми функциями, такими как `strcpy` или` strncpy`.

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. Доступны реализации с открытым исходным кодом для этих функций.

Связанные теги

Источники