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


Функция StringCbVPrintfA (strsafe.h)

Записывает форматированные данные в указанную строку с помощью указателя на список аргументов. Размер целевого буфера предоставляется функции, чтобы убедиться, что она не записывает в конец этого буфера.

StringCbVPrintf является заменой следующих функций:

Синтаксис

STRSAFEAPI StringCbVPrintfA(
  [out] STRSAFE_LPSTR  pszDest,
  [in]  size_t         cbDest,
  [in]  STRSAFE_LPCSTR pszFormat,
  [in]  va_list        argList
);

Параметры

[out] pszDest

Тип: LPTSTR

Конечный буфер, который получает отформатированную строку, завершающуюся значением NULL, созданную из pszFormat и argList.

[in] cbDest

Тип: size_t

Размер целевого буфера в байтах. Это значение должно быть достаточно большим, чтобы вместить последнюю отформатированную строку, а также завершающий символ NULL. Максимально допустимое число байтов — STRSAFE_MAX_CCH * sizeof(TCHAR).

[in] pszFormat

Тип: LPCTSTR

Строка формата. Эта строка должна быть завершена значением NULL. Дополнительные сведения см. в синтаксисе спецификации формата.

[in] argList

Тип: va_list

Аргументы, которые необходимо вставить в строку pszFormat.

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

Тип: HRESULT

Эта функция может возвращать одно из следующих значений. Настоятельно рекомендуется использовать макросы SUCCEEDED и FAILED макросы для проверки возвращаемого значения этой функции.

Возвращаемый код Описание
S_OK
Для копирования результата достаточно места для копирования в pszDest без усечения, а буфер завершается значением NULL.
STRSAFE_E_INVALID_PARAMETER
Значение в cbDest равно 0 или больше STRSAFE_MAX_CCH * sizeof(TCHAR).
STRSAFE_E_INSUFFICIENT_BUFFER
Операция копирования завершилась ошибкой из-за нехватки буферного пространства. Целевой буфер содержит усеченную, завершаемую null версию предполагаемого результата. В ситуациях, когда усечение приемлемо, это может не обязательно рассматриваться как условие сбоя.
 

Обратите внимание, что эта функция возвращает значение HRESULT, в отличие от функций, которые он заменяет.

Замечания

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

Дополнительные сведения о va_lists см. в соглашениях, определенных в Stdarg.h.

Поведение не определено, если строки, на которые указывает pszDest, pszFormatили любые строки аргументов перекрываются.

Ни pszFormat, ни pszDest не должны быть NULL. См. StringCbVPrintfEx, если требуется обработка значений указателя строки NULL.

StringCbVPrintf можно использовать в универсальной форме или в более конкретных формах. Тип данных строки определяет форму этой функции, как показано в следующей таблице.

Тип данных строки Строковый литерал Функция
char "string" StringCbVPrintfA
TCHAR TEXT("string") StringCbVPrintf
WCHAR L"string" StringCbVPrintfW
 

Заметка

Заголовок strsafe.h определяет StringCbVPrintf как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОДа. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP с пакетом обновления 2 (SP2) [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2003 с пакетом обновления 1 (SP1) [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка strsafe.h

См. также

Справочник

StringCbPrintf

StringCbVPrintfEx

StringCchVPrintf