Сведения о строках
Строковые функции предоставляют приложениям средства для копирования, сравнения, сортировки, форматирования и преобразования строк символов, а также средства для определения типа символов каждого символа в строке. Все строковые функции поддерживают однобайтовые, двухбайтовые и Юникодовые наборы символов, если эти наборы символов поддерживаются операционной системой, в которой выполняется приложение.
Предупреждение системы безопасности: Неправильное использование строковых функций может привести к проблемам с безопасностью приложения. Обычно это связано с переполнением буфера, что может позволить атаке типа "отказ в обслуживании" в приложении или внедрению исполняемого кода злоумышленником. Функции Strsafe обеспечивают более безопасную обработку строк и рекомендуются для повышения безопасности приложения. Дополнительные сведения об этих функциях см. в разделе Использование функций Strsafe.h.
В этом разделе рассматриваются следующие темы.
Сравнение со строковыми функциями C Run-Time
Многие строковые функции дублируют или улучшают знакомые строковые функции из стандартной библиотеки времени выполнения C (CRT). Многие из улучшений позволяют строковым функциям работать с Юникодом или расширенными кодировками. В следующей таблице показаны функции CRT, функции Windows (которые поддерживают Юникод, в отличие от функций CRT) и функции StrSafe.
Строковая функция CRT | Строковая функция Windows | Функция StrSafe |
---|---|---|
strcat | lstrcat | |
strcmp | lstrcmp | (нет эквивалентной функции) |
strcpy | lstrcpy | |
strlen | lstrlen |
Например, функция 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 | |
vsprintf | wvsprintf |
Строковые ресурсы
Приложение, которое поддерживает символьные строки в ресурсах, может быть переведено на новые языки с минимальными усилиями. Вместо поиска строк в исходных модулях можно просто преобразовать строки в файле ресурсов и повторно связать приложение. Кроме того, использование строковых ресурсов упрощает создание версий приложения в Юникоде и не в Юникоде из одних и тем же исходных файлов.
Функция LoadString загружает строковый ресурс из исполняемого файла приложения. Функция FormatMessage загружает строковый ресурс и интерпретирует параметры форматирования, которые могут быть внедрены в строку.
Ресурсы в двоичной форме хранятся в формате Юникода. При загрузке ресурсов приложения могут использовать версию Функций ресурсов в Юникоде (например, LoadStringW) для получения ресурсов в виде данных Юникода.
Для 16-разрядных строковых ресурсов максимальная длина составляет 255 символов. Для 32-разрядных строковых ресурсов максимальная длина составляет 65535 символов.