Функция StringCchCopyNExA (strsafe.h)
Копирует указанное число символов из одной строки в другую. Размер целевого буфера предоставляется функции, чтобы убедиться, что она не записывает в конец этого буфера.
StringCchCopyNEx добавляет к функциям StringCchCopyN, возвращая указатель на конец конечной строки, а также количество символов, оставшихся неиспользуемыми в этой строке. Флаги также могут передаваться функции для дополнительного элемента управления.
StringCchCopyNEx является заменой следующих функций:
Синтаксис
STRSAFEAPI StringCchCopyNExA(
[out] STRSAFE_LPSTR pszDest,
[in] size_t cchDest,
[in] STRSAFE_PCNZCH pszSrc,
[in] size_t cchToCopy,
[out, optional] STRSAFE_LPSTR *ppszDestEnd,
[out, optional] size_t *pcchRemaining,
[in] DWORD dwFlags
);
Параметры
[out] pszDest
Тип: LPTSTR
Целевой буфер, который получает скопированную строку.
[in] cchDest
Тип: size_t
Размер pszDestв символах. Это значение должно быть по крайней мере достаточно большим, чтобы хранить скопированные символы (длина pszSrc или значение cchSrc, независимо от того, что меньше) плюс 1, чтобы учесть завершающий символ NULL. Максимально допустимое число символов — STRSAFE_MAX_CCH.
[in] pszSrc
Тип: LPCTSTR
Исходная строка. Эта строка должна быть доступной для чтения до символов cchSrc или конца null, в зависимости от того, что происходит в первую очередь.
[in] cchToCopy
Тип: size_t
Максимальное количество символов, скопированных из pszSrc в pszDest.
[out, optional] ppszDestEnd
Тип: LPTSTR*
Адрес указателя на конец pszDest. Если ppszDestEnd не являетсяNULL, а все данные копируются в целевой буфер, это указывает на конечный символ NULL в конце строки.
[out, optional] pcchRemaining
Тип: size_t*
Количество неиспользуемых символов в pszDest, включая завершающийся символ NULL. Если pcchRemainingNULL, количество не сохраняется или возвращается.
[in] dwFlags
Тип: DWORD
Одно или несколько следующих значений.
Возвращаемое значение
Тип: HRESULT
Эта функция может возвращать одно из следующих значений. Настоятельно рекомендуется использовать макросы SUCCEEDED и FAILED макросы для проверки возвращаемого значения этой функции.
Возвращаемый код | Описание |
---|---|
|
Исходные данные были представлены, полностью скопированы без усечения, и результирующий целевой буфер завершается значением NULL. |
|
Либо pszDest, либо pszSrc больше STRSAFE_MAX_CCH, pszDestNULL при наличии исходных данных для копирования или недопустимого флага. |
|
Операция копирования завершилась ошибкой из-за нехватки буферного пространства. В зависимости от значения dwFlags, целевой буфер может содержать усеченную, завершаемую null версию предполагаемого результата. В ситуациях, когда усечение приемлемо, это может не обязательно рассматриваться как условие сбоя. |
Обратите внимание, что эта функция возвращает значение HRESULT, в отличие от функций, которые он заменяет.
Замечания
StringCchCopyNEx обеспечивает дополнительную обработку буферов в коде. Низкая обработка буфера связана со многими проблемами безопасности, включающими переполнение буфера. StringCchCopyNEx всегда завершает значение NULL и никогда не переполняет допустимый целевой буфер, даже если содержимое исходной строки изменяется во время операции.
Хотя эта подпрограмма предназначена в качестве замены strncpy, существуют различия в поведении. Если cchSrc больше количества символов в pszSrc, StringCchCopyNEx—в отличие от strncpy— не продолжает копировать pszDest с пустыми символами, пока cchSrc символы не будут скопированы.
Поведение не определено, если строки, на которые указывает pszSrc и pszDest перекрываются.
Ни pszSrc, ни pszDest не должны быть NULL, если только флаг STRSAFE_IGNORE_NULLS не указан, в этом случае оба параметра могут быть NULL. Однако ошибка из-за нехватки места может быть возвращена, даже если значения NULL игнорируются.
StringCchCopyNEx можно использовать в универсальной форме или в более конкретных формах. Тип данных строки определяет форму этой функции, как показано в следующей таблице.
Тип данных строки | Строковый литерал | Функция |
---|---|---|
char | "string" | StringCchCopyNExA |
TCHAR | TEXT("string") | StringCchCopyNEx |
WCHAR | L"string" | StringCchCopyNExW |
Заметка
Заголовок strsafe.h определяет StringCchCopyNEx как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP с пакетом обновления 2 (SP2) [классические приложения | Приложения UWP] |
минимальный поддерживаемый сервер | Windows Server 2003 с пакетом обновления 1 (SP1) [классические приложения | Приложения UWP] |
целевая платформа | Виндоус |
заголовка | strsafe.h |
См. также
Справочник