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


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

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

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

Синтаксис

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

Параметры

[out] lpString1

Тип: LPTSTR

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

[in] lpString2

Тип: LPTSTR

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

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

Тип: LPTSTR

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

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

Комментарии

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

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

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

Неправильное использование этой функции может поставить под угрозу безопасность приложения. Эта функция использует структурированную обработку исключений (SEH) для перехвата нарушений доступа и других ошибок. Когда эта функция перехватывает ошибки SEH, она возвращает значение NULL , не завершая строку со значением 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 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header winbase.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

Основные понятия

Справочные материалы

StringCbCopy

StringCbCopyEx

StringCbCopyN

StringCbCopyNEx

StringCchCopy

StringCchCopyEx

StringCchCopyN

StringCchCopyNEx

Строки

lstrcmp

lstrcmpi

lstrlen