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