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


Сведения о строках

Строковые функции предоставляют приложениям средства для копирования, сравнения, сортировки, форматирования и преобразования строк символов, а также средства для определения типа символов каждого символа в строке. Все строковые функции поддерживают однобайтовые, двухбайтовые и Юникодовые наборы символов, если эти наборы символов поддерживаются операционной системой, в которой выполняется приложение.

Предупреждение системы безопасности: Неправильное использование строковых функций может привести к проблемам с безопасностью приложения. Обычно это связано с переполнением буфера, что может позволить атаке типа "отказ в обслуживании" в приложении или внедрению исполняемого кода злоумышленником. Функции Strsafe обеспечивают более безопасную обработку строк и рекомендуются для повышения безопасности приложения. Дополнительные сведения об этих функциях см. в разделе Использование функций Strsafe.h.

В этом разделе рассматриваются следующие темы.

Сравнение со строковыми функциями C Run-Time

Многие строковые функции дублируют или улучшают знакомые строковые функции из стандартной библиотеки времени выполнения C (CRT). Многие из улучшений позволяют строковым функциям работать с Юникодом или расширенными кодировками. В следующей таблице показаны функции CRT, функции Windows (которые поддерживают Юникод, в отличие от функций CRT) и функции StrSafe.

Строковая функция CRT Строковая функция Windows Функция StrSafe
strcat lstrcat
StringCchCat
StringCchCatEx
StringCbCat
StringCbCatEx
strcmp lstrcmp (нет эквивалентной функции)
strcpy lstrcpy
StringCchCopy
StringCchCopyEx
StringCbCopy
StringCbCopyEx
strlen lstrlen
StringCchLength
StringCbLength

 

Например, функция strlen всегда возвращает число байтов в строке, а функция lstrlen возвращает число значений TCHAR , которые ссылаются на байты для версий ANSI функции или значения WCHAR для версий Юникода.

Следующие строковые функции отличаются от стандартных функций C, таких как tolower и toupper , тем, что они работают с любым символом в кодировке. Например, с помощью функции CharLower приложение может преобразовать прописные буквы U с umlaut (Ü) в нижний регистр (ü). Дополнительные сведения о наборах символов см. в разделе Однобайтовые наборы символов.

Функция Описание
CharLower Преобразует символ или строку в нижний регистр.
CharLowerBuff Преобразует символьную строку в нижний регистр.
CharNext Переходит к следующему символу в строке.
CharPrev Переходит к предыдущему символу в строке.
CharUpper Преобразует символ или строку в верхний регистр.
CharUpperBuff Преобразует строку в верхний регистр.

 

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

Функция Описание
IsCharAlpha Определяет, является ли символ алфавитным.
IsCharAlphaNumeric Определяет, является ли символ буквенно-цифровым.
IsCharLower Определяет, является ли символ строчным.
IsCharUpper Определяет, является ли символ прописным.

 

В следующей таблице показаны расширения Юникода для стандартных функций времени выполнения C (CRT). Как упоминалось ранее, функции StrSafe обеспечивают более безопасную обработку строк и рекомендуются для повышения безопасности приложения.

Стандартная функция CRT Строковая функция Функция StrSafe
sprintf wsprintf
StringCchPrintf
StringCchPrintfEx
StringCbPrintf
StringCbPrintfEx
vsprintf wvsprintf
StringCchVPrintf
StringCchVPrintfEx
StringCbVPrintf
StringCbVPrintfEx

 

Строковые ресурсы

Приложение, которое поддерживает символьные строки в ресурсах, может быть переведено на новые языки с минимальными усилиями. Вместо поиска строк в исходных модулях можно просто преобразовать строки в файле ресурсов и повторно связать приложение. Кроме того, использование строковых ресурсов упрощает создание версий приложения в Юникоде и не в Юникоде из одних и тем же исходных файлов.

Функция LoadString загружает строковый ресурс из исполняемого файла приложения. Функция FormatMessage загружает строковый ресурс и интерпретирует параметры форматирования, которые могут быть внедрены в строку.

Ресурсы в двоичной форме хранятся в формате Юникода. При загрузке ресурсов приложения могут использовать версию Функций ресурсов в Юникоде (например, LoadStringW) для получения ресурсов в виде данных Юникода.

Для 16-разрядных строковых ресурсов максимальная длина составляет 255 символов. Для 32-разрядных строковых ресурсов максимальная длина составляет 65535 символов.