Strlcpy

Strlcpy

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.

Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Strlcpy" в других словарях:

  • strlcpy — и strlcat  нестандартные функции, созданные в качестве замены часто используемых некорректным образом аналогов стандартной библиотеки языка программирования Си для копирования содержимого нуль терминированной строки в буфер ограниченного… …   Википедия

  • Strlcpy — The strlcpy function, developed by Todd C. Miller and Theo de Raadt for use in the C programming language, is intended to replace the function strcpy and provide a simpler and more robust interface than strncpy. It is designed to copy the… …   Wikipedia

  • OpenBSD Sicherheitsmerkmale — Das Betriebssystem OpenBSD ist für seinen Fokus auf Computersicherheit und die Entwicklung einer Vielzahl von Sicherheitsfunktionen bekannt. Inhaltsverzeichnis 1 Programmierschnittstellen und API Änderungen 2 Speicherschutz 3 Kryptografie und… …   Deutsch Wikipedia

  • C string handling — C string redirects here. For the underwear and swimwear, see C string (clothing). C Standard Library Data types Character classification Strings Mathematics …   Wikipedia

  • OpenBSD security features — The OpenBSD operating system is noted for its security focus and for the development of a number of security features. Contents 1 API and build changes 2 Memory protection 3 Cryptography and randomization …   Wikipedia

  • OpenBSD-Sicherheitsmerkmale — Das Betriebssystem OpenBSD ist für seinen Fokus auf Computersicherheit und die Entwicklung einer Vielzahl von Sicherheitsfunktionen bekannt. Inhaltsverzeichnis 1 Programmierschnittstellen und API Änderungen 2 Speicherschutz 3 Krypt …   Deutsch Wikipedia

  • Strncpy — strncpy  функция стандартной библиотеки языка программирования Си, для копирования содержимого нуль терминированной строки в буфер ограниченного размера. Функция strncpy аналогична strcpy с защитой от переполнения буфера, однако не является… …   Википедия

  • strncpy — strncpy  функция стандартной библиотеки языка программирования Си, для копирования содержимого нуль терминированной строки в буфер ограниченного размера. Функция strncpy аналогична strcpy с защитой от переполнения буфера, однако не является… …   Википедия

  • OpenBSD — OpenBSD …   Wikipedia

  • OpenBSD — Famille BSD Type de noyau Monolithique Plates formes …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»