Функция lstrcpyA (winbase.h)
Копирует строку в буфер.
Синтаксис
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 |
См. также
Основные понятия
Справочные материалы