Страница Справочника strcpy.3
STRCPY(3) Справочник библиотечных функций FreeBSD STRCPY(3)
НАЗВАНИЕ
strcpy, strncpy -- копировать строки
БИБЛИОТЕКА
Стандартная библиотека C (libc, -lc)
СИНТАКСИС
#include <string.h>
char *
stpcpy(char *dst, const char *src);
char *
strcpy(char * restrict dst, const char * restrict src);
char *
strncpy(char * restrict dst, const char * restrict src, size_t len);
ОПИСАНИЕ
Функции stpcpy() и strcpy() копируют исходную строку src в целевую строку
dst (включая завершающий символ `\0').
Функция strncpy() копирует не более len символов из src в dst. Если
длина src меньше, чем len, остаток строки dst заполняется символами `\0'.
В противном случае, dst не завершается символом `\0'.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функции strcpy() и strncpy() возвращают dst. Функция stpcpy() возвращает
указатель на завершающий символ `\0' строки dst.
ПРИМЕРЫ
Нижеследующее запишет строку ``abc\0\0\0'' в массив chararray:
char chararray[6];
(void)strncpy(chararray, "abc", sizeof(chararray));
Нижеследующее запишет в массив chararray строку ``abcdef'':
char chararray[6];
(void)strncpy(chararray, "abcdefgh", sizeof(chararray));
Необходимо заметить, что это не завершит chararray символом NUL,
поскольку длина исходной строки не меньше значения аргумента len.
Нижеследующее копирует столько символов из input в buf, сколько возможно,
и завершает результат символом NUL. Поскольку strncpy() не гарантирует
завершение строки символом NUL, это должно быть сделано явно.
char buf[1024];
(void)strncpy(buf, input, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = '\0';
Можно сделать то же самое, но лучше, с помощью strlcpy(3), как показано в
следующем примере:
(void)strlcpy(buf, input, sizeof(buf));
Следует отметить, что поскольку функция strlcpy(3) не определена ни в
одном стандарте, то её стоит использовать только в том случае, если пере-
носимость не требуется.
СООБРАЖЕНИЯ БЕЗОПАСНОСТИ
Функция strcpy() легко может быть использована неправильным способом,
позволяющим злонамеренному пользователю произвольным образом изменить
функциональность работающей программы посредством переполнения буфера
(buffer overflow attack). (См. FSA и раздел ПРИМЕРЫ.)
СМОТРИ ТАКЖЕ
bcopy(3), memccpy(3), memcpy(3), memmove(3), strlcpy(3)
The FreeBSD Security Architecture.
СТАНДАРТЫ
Функции strcpy() и strncpy() соответствуют стандарту ISO/IEC 9899:1990
(``ISO C90''). Функция stpcpy() есть наследие MS-DOS и GNU, и не соот-
ветствует ни одному стандарту.
ИСТОРИЯ
Функция stpcpy() впервые появилась во FreeBSD 4.4, придя из Linux образца
1998 года.
FreeBSD 6.2 9 августа 2001 FreeBSD 6.2