Rozdíly v řetězcové funkci
Toto téma popisuje rozdíly mezi řetězcovými funkcemi používanými při zpracování informací o sadě Unicode a znakové sady. Tyto funkce mají kódování Unicode i implementace znakové stránky systému Windows, které podporují parametry znakové stránky Unicode a Windows.
Následující řetězcové funkce nevyžadují speciální komentář. Implementace znakové stránky Unicode a Windows fungují stejně.
- CharNext
- CharPrev
- StringCchCat, StringCchCatEx
- StringCchCopy, StringCchCopyEx
- StrCbLength, StrCchLength
Hodnota délky načtená jednou z funkcí délky řetězce je vždy založena na normální šířce znaků: 8 bitů pro znakové stránky Windows, 16 bitů pro Unicode. Tato hodnota se často označuje jako "počet znaků". Tento termín je přísně správný, protože znakové stránky Windows, které používají dvoubajtové znakové sady (DBCS) mají několik znaků s plnou šířkou, které jsou ve skutečnosti reprezentovány dvěma po sobě jdoucími bajty. Podobná situace vzniká u náhradních v unicode.
Následující řetězcové funkce jsou citlivé na národní prostředí aktuálního vlákna odvozené od jazyka, který uživatel vybere v Ovládacích panelech. Funkce lstrcmp a lstrcmpi neprovádějí porovnání bajtů, například jejich názvové sady ANSI, například strcmp. Místo toho porovnávají řetězce podle pravidel národního prostředí.
- CharLower
- CharLowerBuff
- CharUpper
- CharUpperBuff
- lstrcmp
- lstrcmpi
Následující funkce převádějí mezi znakovou sadou OEM a aktuální znakovou stránkou systému Windows nebo kódováním Unicode v závislosti na použité verzi:
Funkce tisku, například StringCbPrintf, podporují Unicode poskytnutím následujících nových a změněných datových typů ve specifikacích jejich formátu. Tyto specifikace formátu ovlivňují způsob, jakým funkce interpretují odpovídající vstupní parametr.
Specifikace formátu | Datový typ pro verzi znakové stránky Windows | Datový typ pro verzi Unicode |
---|---|---|
c | UKLÍZEČKA | WCHAR |
C | WCHAR | UKLÍZEČKA |
hc, hC | UKLÍZEČKA | UKLÍZEČKA |
hs, hS | LPSTR | LPSTR |
lc, lC | WCHAR | WCHAR |
ls, lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
Datový typ výstupního textu vždy závisí na verzi funkce. Pokud datový typ vstupního parametru a datového typu výstupního textu nesouhlasí, funkce tisku provede převod z Unicode na aktuální znakovou stránku Systému Windows nebo naopak podle potřeby.
Pro verzi tiskových funkcí unicode je formátovací řetězec Unicode, stejně jako výstupní text.
Opatrnost
Špatné zpracování vyrovnávací paměti je spojeno s mnoha problémy se zabezpečením, které zahrnují přetečení vyrovnávací paměti. Viz referenční Strsafe.h . Funkce definované v strsafe.h poskytují další zpracování pro správné zpracování vyrovnávací paměti ve vašem kódu. Z tohoto důvodu mají nahradit své předdefinované protějšky C/C++ a také konkrétní implementace systému Microsoft Windows. Další informace najdete v tématu aspekty zabezpečení: Mezinárodní funkce.
Související témata