Функция lstrcpyn копирует указанное число символов из исходной строки в буфер.
LPTSTR lstrcpyn( LPTSTR lpString1, LPCTSTR lpString2, int iMaxLength ); |
[out] Указатель на буфер, в который функция копирует символы. Буфер должен быть достаточно большим, чтобы содержать в себе число значений TCHAR, указанных параметром iMaxLength, включая место для символа завершающего нуля.
lpString2[in] Указатель на строку с завершающим нулем, из которого функция копирует символы.
iMaxLength[in] Указывает число значений TCHAR, которые будут скопированы из строки указанной при помощи параметра lpString2 в буфер, указанный параметром lpString1, включая символ завершающего нуля. Это относится к байтам для версий функции ANSI или значений WCHAR для версий Unicode.
Если функция завершается успешно, возвращаемое значение - указатель в буфер. Функция может успешно завершиться даже тогда, когда исходная строка больше, чем символов указанных в iMaxLength. Если функция завершается ошибкой, возвращаемое значение NULL.
Предупреждение защиты
Используя эту функцию неправильно, можно поставить под угрозу обеспечение безопасности вашего приложения. Эта функция использует структурную обработку исключений (SEH), чтобы перехватить нарушения прав доступа и другие ошибки. Когда эта функция перехватывает ошибки структурной обработки исключений (SEH), она возвращает значение NULL, не завершая строку символом конца ('\0') и не уведомляя вызывающую программу об ошибке. Вызывающая программа не защищена от того, чтобы допустить, что недостаточное место - это сбойная ситуация. Например, если буфер указанный параметром lpString1, не является достаточно большим, чтобы вместить скопированную строку, может произойти переполнение буфера. При копировании всей строки обратите внимание! на то, что оператор sizeof возвращает число байтов. Например, если lpString1 указывает на буфер szString1, который объявляется как TCHAR szString[100], то sizeof (szString1) дает размер буфера в байтах больше, чем WCHAR, который может привести к переполнению буфера для версии функции Unicode. Ситуации переполнения буфера - причина многих проблем для защиты приложений и они могут служить причиной взлома защиты типа "отказ от обслуживания" опираясь на приложение, если происходит нарушение прав доступа. В худшем случае, переполнение буфера может дать возможность взломщику защиты вставить исполняемый код в ваш процесс, особенно если lpString1 - буфер, работающий со стеком. Кроме того, нет гарантии, что скопированная строка будет завершена символом конца строки ('\0'). В этом случае, использование sizeof (szString1)/sizeof (szString1 [0]) дает правильный размер буфера. |
Рассмотрите использование вместо этой функции StringCchCopy; используйте либо StringCchCopy (buffer, src, sizeof (buffer)/sizeof (buffer [0]);, знайте, что буфер не должен быть указателем или использовать функцию StringCchCopy (buffer, src, ARRAYSIZE (buffer);, знайте, что, копируя в указатель, вызывающая программа ответственна за передачу размера указателей в памяти, в символах.
Перед тем, как продолжить, просмотрите статью Соображение по безопасности: Пользовательский интерфейс Windows.Буфер указанный при помощи параметра lpString1, должен быть достаточно большим, чтобы включить в себя символ завершающего нуля, а значение длины строки, указанное параметром iMaxLength, включает место для символа завершающего нуля. Нижеследующий код копирует строку "abc", сопровождаемую символом завершающего нуля, в chBuffer.
TCHAR chBuffer[512]; lstrcpyn(chBuffer, "abcdefghijklmnop", 4); |
Функция lstrcpyn имеет неопределенное поведение, если источник и целевые буфера совмещаются.
Windows 95/98/Me: lstrcpynW поддерживается программой Microsoft Layer for Unicode (MSLU). Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в описании Microsoft Layer for Unicode для системы Windows 95/98/Me.
Обзор Строки, Функции, используемые строками, StringCbCopy, StringCbCopyEx, StringCbCopyN, StringCbCopyNEx, StringCchCopy, StringCchCopyEx, StringCchCopyN, StringCchCopyNEx, StringCbLength, StringCchLength, lstrcat, lstrcmp, lstrcmpi, lstrcpy, lstrlen
Размещение и совместимость lstrcpyn |
||
К | Windows XP | Да |
л | Windows 2000 Professional | Да |
и | Windows NT Workstation | Да версии 3.5 |
е | Windows Me | Да |
н | Windows 98 | Да |
т | Windows 95 | Да |
С | Windows Server 2003 | Да |
е | Windows 2000 Server | Да |
р | Windows NT Server | Да версии 3.5 |
в | ||
е | ||
р | ||
Используемая библиотека | Kernel32.lib | |
Используемая DLL | kernel32.dll | |
Заголовочный файл | ||
- объявлено в | Winbase.h | |
- включено в | Windows.h | |
Unicode | Реализуются как версии Unicode и ANSI. | |
Замечания по платформе | Не имеется |