strlcpy

strlcpy

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

strlcpy — безопасная замена стандартной функции strcpy; strlcat — безопасная замена стандартной функции strcat.

strlcpy и strlcat появились и поддерживаются в OpenBSD. Позднее их начали использовать и в некоторых других операционных системах. В системах, не поддерживающих strlcpy/strlcat, возможна их кустарная реализация, например из исходного кода, распространяемого по лицензии BSD.

Содержание

Описание

Прототипы, описанные в заголовочном файле string.h:

size_t strlcpy (char *dst, const char *src, size_t size);
size_t strlcat (char *dst, const char *src, size_t size);
  • dst — указатель на буфер назначения.
  • src — указатель на исходную строку.
  • size — размер буфера назначения.

Функция strlcpy копирует из строки src в буфер dst не более чем size - 1 символов и гарантированно устанавливает в конец строки нулевой символ. strlcat делает то же самое, однако копирование ведётся не в начало dst, а таким образом, чтобы продолжить строку, на которую указывает dst. В случае, когда dst указывает на нуль-символ, поведение функций эквивалентно.

Возвращаемое значение

strlcpy возвращает размер строки по адресу src. strlcat возвращает суммарную длину строк по адресам src и dst. Возвращаемое значение не зависит от того, удалось скопировать строку полностью или нет; это позволяет легко определить что буфер назначения слишком мал для копируемой строки.

Пример использования

#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 символов + нулевой)

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


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

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

  • 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


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

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