strlcpy

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску


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.

en:Strlcpy ja:Strlcpy

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....