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


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

Возвращает одну строку текста из stdin, вплоть до и включая символ новой строки ("\n"). Строка текста копируется в целевой буфер, а новый символ заменяется пустым символом. Размер целевого буфера предоставляется функции, чтобы убедиться, что она не записывает в конец этого буфера.

примечание Эту функцию можно использовать только встраиваемой.
 
StringCbGetsEx добавляет к функциям StringCbGets, возвращая указатель на конец конечной строки, а также количество байтов, оставшихся неиспользуемыми в этой строке. Флаги также могут передаваться функции для дополнительного элемента управления.

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

StringCbGetsEx не является заменой для fgets, что не заменяет новые строки символами конца null.

Синтаксис

STRSAFEAPI StringCbGetsExA(
  [out]           STRSAFE_LPSTR pszDest,
  [in]            size_t        cbDest,
  [out, optional] STRSAFE_LPSTR *ppszDestEnd,
  [out, optional] size_t        *pcbRemaining,
  [in]            DWORD         dwFlags
);

Параметры

[out] pszDest

Тип: LPTSTR

Целевой буфер, который требуется получить входные данные.

[in] cbDest

Тип: size_t

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

[out, optional] ppszDestEnd

Тип: LPTSTR*

Адрес указателя на конец pszDest. Если ppszDestEnd не являетсяNULL, а все данные копируются в целевой буфер, это указывает на конечный символ NULL в конце строки.

[out, optional] pcbRemaining

Тип: size_t*

Количество неиспользуемых байтов в pszDest, включая те, которые используются для завершения символа NULL. Если pcbRemainingnull, счетчик не сохраняется или возвращается.

[in] dwFlags

Тип: DWORD

Одно или несколько следующих значений.

Ценность Значение
STRSAFE_FILL_BEHIND_NULL
0x00000200
Если функция выполнена успешно, используется низкий байт dwFlags (0) для заполнения неинициализированной части pszDest после конца символа NULL.
STRSAFE_IGNORE_NULLS
0x00000100
Обработайте значений NULL строк, таких как пустые строки (TEXT("")). Этот флаг полезен для эмулирования таких функций, как lstrcpy.
STRSAFE_FILL_ON_FAILURE
0x00000400
Если функция завершается ошибкой, используется низкий байт dwFlags (0) для заполнения всего буфера pszDest, а буфер завершается значением NULL. В случае сбоя STRSAFE_E_INSUFFICIENT_BUFFER любая усеченная строка перезаписывается.
STRSAFE_NULL_ON_FAILURE
0x00000800
Если функция завершается ошибкой, pszDest имеет пустую строку (TEXT("")). В случае сбоя STRSAFE_E_INSUFFICIENT_BUFFER любая усеченная строка перезаписывается.
STRSAFE_NO_TRUNCATION
0x00001000
Как и в случае STRSAFE_NULL_ON_FAILURE, если функция завершается ошибкой, pszDest имеет пустую строку (TEXT("")). В случае сбоя STRSAFE_E_INSUFFICIENT_BUFFER любая усеченная строка перезаписывается.

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

Тип: HRESULT

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

Возвращаемый код Описание
S_OK
Данные считывались из stdin, копировались в буфер по pszDest, а буфер был завершен с пустым завершением.
STRSAFE_E_END_OF_FILE
Указывает ошибку или условие завершения файла. Используйте feof или феррор, чтобы определить, какой из них произошел.
STRSAFE_E_INVALID_PARAMETER
Значение в cbDest больше максимального допустимого значения или недопустимого флага.
STRSAFE_E_INSUFFICIENT_BUFFER
Значение в cbDest равно 1 или меньше.
 

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

Замечания

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

Значение pszDest не должно быть null, если не указан флаг STRSAFE_IGNORE_NULLS. Однако ошибка из-за нехватки места может быть возвращена, даже если значения NULL игнорируются.

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

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

Заметка

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

Требования

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

См. также

Справочник

StringCbGets

StringCchGetsEx