Функция lstrcpyn

Функция lstrcpyn копирует указанное число символов из исходной строки в буфер.

Синтаксис

LPTSTR lstrcpyn(      

    LPTSTR lpString1,
    LPCTSTR lpString2,
    int iMaxLength
);

Параметры

lpString1

[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/MelstrcpynW поддерживается программой 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.
Замечания по платформе Не имеется

Назад в оглавление
На главную страницу
В оглавление справки

Hosted by uCoz