Страница Справочника 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