Различия строковых функций
В этом разделе описываются различия между строковыми функциями, используемыми в обработке сведений юникода и набора символов. Эти функции имеют Юникода и реализации кодовой страницы Windows для поддержки параметров кодовой страницы Юникода и Windows.
Следующие строковые функции не требуют специального комментария. Их реализации кодовой страницы Юникода и Windows работают одинаково.
- CharNext
- CharPrev
- StringCchCat, StringCchCatEx
- StringCchCopy, StringCchCopyEx
- StrCbLength, StrCchLength
Значение длины, полученное одной из функций длины строки, всегда основано на обычной ширине символов: 8 бит для кодовых страниц Windows, 16 бит для Юникода. Это значение часто называется "числом символов". Этот термин строго правильно, так как кодовые страницы Windows, использующие двубайтовые наборы символов (DBCSS), имеют некоторые символы полной ширины, которые фактически представлены двумя последовательными байтами. Аналогичная ситуация возникает для суррогатных в Юникоде.
Следующие строковые функции чувствительны к языковому стандарту текущего потока, производным от языка, который пользователь выбирает на панели управления. Функции lstrcmp и lstrcmpi не выполняют сравнения байтов, например имена ANSI, например strcmp. Вместо этого они сравнивают строки в соответствии с правилами языкового стандарта.
Следующие функции преобразуются между набором символов OEM и текущей кодовой страницей Windows или Юникодом в зависимости от используемой версии:
Функции печати, например, StringCbPrintf, поддерживают Юникод, предоставляя следующие новые и измененные типы данных в спецификациях формата. Эти спецификации формата влияют на то, как функции интерпретируют соответствующий входной параметр.
Спецификация формата | Тип данных для версии кодовой страницы Windows | Тип данных для версии Юникода |
---|---|---|
c | ОБУГЛИВАТЬ | WCHAR |
C | WCHAR | ОБУГЛИВАТЬ |
hc, hC | ОБУГЛИВАТЬ | ОБУГЛИВАТЬ |
hs, hS | LPSTR | LPSTR |
lc, lC | WCHAR | WCHAR |
ls, lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
Тип данных для выходного текста всегда зависит от версии функции. Если тип данных входного параметра и тип данных выходного текста не согласен, функция печати выполняет преобразование из Юникода на текущую кодовую страницу Windows или наоборот.
Для версии функций печати Юникод строка формата — Юникод, как и выходной текст.
Осторожность
Низкая обработка буфера связана со многими проблемами безопасности, включающими переполнение буфера. См. справочник Strsafe.h. Функции, определенные в Strsafe.h, обеспечивают дополнительную обработку буферов в коде. По этой причине они предназначены для замены встроенных аналогов C/C++, а также конкретных реализаций Microsoft Windows. Дополнительные сведения см. в разделе Вопросы безопасности: международные функции.
Связанные разделы
-
Юникод в API Windows