strlcpy
Strlcpy — нестандартная функция, для замены функции стандартной библиотеки языка программирования Си strncpy, для копирования содержимого нуль-терминированной строки в буфер ограниченного размера.
strlcpy
— безопасная и производительная замена стандартной функции strncpy
, функция-аналог strcpy
с защитой от переполнения буфера.
Функция появилась и поддерживается в OpenBSD и некоторых других операционных системах. В системах не поддерживающих strlcpy
возможна ее кустарная реализация, например из исходного кода, распространяемого по лицензии BSD.
Функция
Прототип, описанный в заголовочном файле string.h
:
size_t strlcpy (char *dst, const char *src, size_t size);
dst
— указатель на буфер назначения.src
— указатель на исходную строку.size
— размер буфера назначения.
Функция копирует из строки src
в буфер dst
не более чем size - 1
символов и гарантированно устанавливает в конец строки нулевой символ.
Возвращаемое значение
Функция возвращает размер строки по адресу src
, вне зависимости удалось ее скопировать полностью или нет. Это позволяет легко определить что буфер назначения слишком мал для копируемой строки.
Пример использования
#include <string.h>
#include <stdio.h> /* для printf() */
char buf[10]; // буфер размером меньше строки
int main()
{ char *str = "образец строки";
size_t sz;
buf[0] = '\0'; // избыточная инициализация для отладочной печати
printf("строка: \"%s\"\n\n", str);
printf("буфер перед копированием: \"%s\"\n", buf);
sz = strlcpy(buf, str, sizeof(buf));
if (sz >= sizeof(buf)) // пример определения усечения строки
printf("обнаружено усечение строки с %d до %d символов !\n", sz, sizeof(buf)-1);
printf("буфер после копирования: \"%s\"\n", buf);
return 0;
}
Вывод:
строка: "образец строки" буфер перед копированием: "" обнаружено усечение строки с 14 до 9 символов ! буфер после копирования: "образец с"
(строка при копировании была усечена до размера буфера - 9 символов + нулевой)
Внешние ссылки
- strlcpy(1) (англ.) — Руководство по функции
strlcpy
на сайте OpenBSD - strlcpy.c (англ.) — Исходный код функции
strlcpy
в CVS-репозитории OpenBSD.
Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....