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


О строках

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

предупреждение системы безопасности: неправильное использование строковых функций может вызвать проблемы с безопасностью приложения. Обычно это включает переполнение буфера, которое может привести к атаке типа "отказ в обслуживании" на ваше приложение или внедрению исполняемого кода злоумышленником. Функции 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 с умлаутом (Ü) в строчную букву (ü). Дополнительные сведения о наборах символов см. в однобайтовых наборах символов.

Функция Описание
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 символов.