Поделиться через


функция lstrcpyA (winbase.h)

Копирует строку в буфер.

предупреждение не использовать. Вместо этого рекомендуется использовать StringCchCopy. См. примечания.
 

Синтаксис

LPSTR lstrcpyA(
  [out] LPSTR  lpString1,
  [in]  LPCSTR lpString2
);

Параметры

[out] lpString1

Тип: LPTSTR

Буфер для получения содержимого строки, на которую указывает параметр lpString2. Буфер должен быть достаточно большим, чтобы содержать строку, включая завершающий символ NULL.

[in] lpString2

Тип: LPTSTR

Строка, завершающаяся значением NULL, которая будет скопирована.

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

Тип: LPTSTR

Если функция выполнена успешно, возвращаемое значение является указателем на буфер.

Если функция завершается ошибкой, возвращаемое значение NULL и lpString1 не может быть завершено значение NULL.

Замечания

С помощью двухбайтового набора символов (DBCS) системы эта функция может использоваться для копирования строки DBCS.

Функция lstrcpy имеет неопределенное поведение, если буферы источника и назначения перекрываются.

Замечания по безопасности

Использование этой функции неправильно может компрометации безопасности приложения. Эта функция использует структурированную обработку исключений (SEH) для перехвата нарушений доступа и других ошибок. Если эта функция перехватывает ошибки SEH, она возвращает NULL без завершения строки без уведомления вызывающего объекта об ошибке. Вызывающий объект не является безопасным, чтобы предположить, что недостаточно места является условием ошибки.

lpString1 должно быть достаточно большим для хранения lpString2 и закрытия "\0", в противном случае может произойти переполнение буфера.

Ситуации переполнения буфера являются причиной многих проблем безопасности в приложениях и могут привести к атаке типа "отказ в обслуживании" в приложении при возникновении нарушения доступа. В худшем случае переполнение буфера может позволить злоумышленнику внедрить исполняемый код в процесс, особенно если lpString1 является буфером на основе стека.

Вместо этого рекомендуется использовать StringCchCopy; используйте либо StringCchCopy(buffer, sizeof(buffer)/sizeof(buffer[0]), src);, учитывая, что buffer не должно быть указателем или использовать StringCchCopy(buffer, ARRAYSIZE(buffer), src);, учитывая, что при копировании в указатель вызывающий объект отвечает за передачу размера указанной памяти в символах.

Заметка

Заголовок winbase.h определяет lstrcpy как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000 Профессиональный [только классические приложения]
минимальный поддерживаемый сервер Windows 2000 Server [только классические приложения]
целевая платформа Виндоус
заголовка winbase.h (включая Windows.h)
библиотеки Kernel32.lib
DLL Kernel32.dll

См. также

концептуальные

Справочник

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

строки

lstrcmp

lstrcmpi

lstrlen