Różnice funkcji ciągów
W tym temacie opisano różnice między funkcjami ciągów używanymi w obsłudze informacji o formacie Unicode i zestawie znaków. Te funkcje mają zarówno Unicode, jak i implementacje strony kodowej systemu Windows do obsługi parametrów stron kodowych Unicode i Windows.
Następujące funkcje ciągów nie wymagają specjalnego komentarza. Implementacje stron kodowych Unicode i Windows działają identycznie.
- CharNext
- charprev
- StringCchCat, StringCchCatEx
- StringCchCopy, StringCchCopyEx
- StrCbLength, StrCchLength
Wartość długości pobierana przez jedną z funkcji długości ciągu jest zawsze oparta na normalnej szerokości znaków: 8 bitów dla stron kodu systemu Windows, 16 bitów dla Unicode. Ta wartość jest często określana jako "liczba znaków". Ten termin jest ściśle poprawny, ponieważ strony kodu systemu Windows używające zestawów znaków dwubajtowych (DBCS) mają kilka znaków o pełnej szerokości, które są faktycznie reprezentowane przez dwa kolejne bajty. Podobna sytuacja pojawia się w przypadku zastępczych w standardze Unicode.
Następujące funkcje ciągów są wrażliwe na ustawienia regionalne bieżącego wątku pochodzące z języka wybranego przez użytkownika w Panelu sterowania. Funkcje lstrcmp i lstrcmpi nie wykonują porównań bajtów, takich jak ich nazwy ANSI, na przykład strcmp. Zamiast tego porównują ciągi zgodnie z regułami ustawień regionalnych.
Następujące funkcje konwertują między zestawem znaków OEM a bieżącą stroną kodów systemu Windows lub Unicode, w zależności od używanej wersji:
Funkcje drukowania, na przykład, StringCbPrintf, obsługują Unicode, udostępniając następujące nowe i zmienione typy danych w specyfikacji formatu. Te specyfikacje formatu mają wpływ na sposób interpretowania odpowiedniego parametru wejściowego przez funkcje.
Specyfikacja formatu | Typ danych dla wersji strony kodowej systemu Windows | Typ danych dla wersji Unicode |
---|---|---|
c | CHAR | WCHAR |
C | WCHAR | CHAR |
hc, hC | CHAR | CHAR |
hs, hS | LPSTR | LPSTR |
lc, lC | WCHAR | WCHAR |
ls, lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
Typ danych dla tekstu wyjściowego zawsze zależy od wersji funkcji. Gdy typ danych parametru wejściowego i typ danych tekstu wyjściowego nie są zgodne, funkcja drukowania wykonuje konwersję z Unicode na bieżącą stronę kodową systemu Windows lub odwrotnie, zgodnie z potrzebami.
W przypadku wersji Unicode funkcji drukowania ciąg formatu to Unicode, podobnie jak tekst wyjściowy.
Ostrożność
Słaba obsługa buforu jest zamieszany w wiele problemów z zabezpieczeniami, które obejmują przekroczenia buforu. Zobacz Strsafe.h Reference. Funkcje zdefiniowane w pliku Strsafe.h zapewniają dodatkowe przetwarzanie dla prawidłowej obsługi buforu w kodzie. Z tego powodu mają one zastąpić wbudowane odpowiedniki C/C++, a także określone implementacje systemu Microsoft Windows. Aby uzyskać więcej informacji, zobacz Zagadnienia dotyczące zabezpieczeń: Funkcje międzynarodowe.
Tematy pokrewne