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

Источник — «http://www.seobuilding.ru/wiki/Strlcpy»

Served in 0.671 secs.