Informacje o ciągach
Funkcje ciągów dają aplikacjom środki do kopiowania, porównywania, sortowania, formatowania i konwertowania ciągów znaków, a także środków w celu określenia typu znaku każdego znaku w ciągu. Wszystkie funkcje ciągów obsługują zestawy znaków jednobajtowych, dwubajtowych i Unicode, jeśli te zestawy znaków są obsługiwane przez system operacyjny, na którym jest uruchamiana aplikacja.
Ostrzeżenie o zabezpieczeniach: Nieprawidłowe użycie funkcji ciągów może powodować problemy z zabezpieczeniami aplikacji. Zazwyczaj wiąże się to z przepełnieniem buforu, które może zezwalać na atak typu "odmowa usługi" na aplikację lub iniekcję kodu wykonywalnego od osoby atakującej. Funkcje Strsafe umożliwiają bezpieczniejszą obsługę ciągów i są zalecane w celu zapewnienia lepszej ochrony aplikacji. Aby uzyskać więcej informacji na temat tych funkcji, zobacz Using the Strsafe.h Functions.
W tej sekcji omówiono następujące tematy.
Porównanie z funkcjami ciągów języka C Run-Time
Wiele funkcji ciągów duplikuje lub rozszerza znane funkcje ciągów ze standardowej biblioteki C run-time (CRT). Wiele ulepszeń umożliwia działanie funkcji ciągów z zestawami znaków Unicode lub rozszerzonymi. W poniższej tabeli przedstawiono funkcje CRT, funkcje systemu Windows (które obsługują kod Unicode, w przeciwieństwie do funkcji CRT) i funkcje StrSafe.
Funkcja ciągu znaków CRT | Funkcja łańcucha znaków Windows | StrSafe, funkcja |
---|---|---|
strcat | lstrcat | |
strcmp | lstrcmp | (brak równoważnej funkcji) |
strcpy | lstrcpy | |
strlen | lstrlen |
Funkcja strlen, na przykład, zawsze zwraca liczbę bajtów w ciągu, ale funkcja lstrlen zwraca liczbę wartości TCHAR, która odwołuje się do bajtów dla wersji ANSI funkcji lub WCHAR wartości dla wersji Unicode.
Następujące funkcje ciągów różnią się od standardowych funkcji języka C, takich jak tolower i toupper w tym, że działają na dowolnym znaku w zestawie znaków. Korzystając z funkcji CharLower, aplikacja może na przykład przekonwertować wielką literę U z umlautem (Ü) na małą literę (ü). Aby uzyskać więcej informacji na temat zestawów znaków, zobacz zestawy znaków jednobajtowych.
Funkcja | Opis |
---|---|
CharLower | Konwertuje znak lub ciąg na małe litery. |
CharLowerBuff | Konwertuje ciąg znaków na małe litery. |
CharNext | Przechodzi do następnego znaku w ciągu. |
charprev | Przechodzi do poprzedniego znaku w ciągu. |
CharUpper | Konwertuje znak lub ciąg na wielkie litery. |
CharUpperBuff | Konwertuje ciąg na wielkie litery. |
Następujące funkcje ciągów tworzą ustalenia dotyczące znaku na podstawie semantyki języka wybranego przez użytkownika. Te funkcje są włączone w formacie Unicode.
Funkcja | Opis |
---|---|
IsCharAlpha | Określa, czy znak jest alfabetyczny. |
IsCharAlphaNumeric | Określa, czy znak jest alfanumeryczny. |
IsCharLower | Określa, czy znak ma małe litery. |
IsCharUpper | Określa, czy znak jest wielką literą. |
W poniższej tabeli przedstawiono rozszerzenia Unicode dla standardowych funkcji czasu wykonywania języka C (CRT). Jak wspomniano wcześniej, funkcje StrSafe umożliwiają bezpieczniejszą obsługę ciągów i są zalecane w celu zapewnienia lepszego bezpieczeństwa aplikacji.
Standardowa funkcja CRT | Funkcja string | StrSafe, funkcja |
---|---|---|
sprintf | wsprintf | |
vsprintf | wvsprintf |
Zasoby ciągów
Aplikacja, która obsługuje ciągi znaków w zasobach, można przetłumaczyć na nowe języki przy minimalnym wysiłku. Zamiast wyszukiwać ciągi w modułach źródłowych, możesz po prostu przetłumaczyć ciągi w pliku zasobu i ponownie połączyć aplikację. Ponadto użycie zasobów ciągów upraszcza tworzenie wersji Unicode i innych niż Unicode aplikacji z tych samych plików źródłowych.
Funkcja LoadString ładuje zasób ciągu z pliku wykonywalnego aplikacji. Funkcja FormatMessage ładuje zasób ciągu i interpretuje opcje formatowania, które mogą być osadzone w ciągu.
Zasoby w postaci binarnej są przechowywane w formacie Unicode. Podczas ładowania zasobów aplikacje mogą używać wersji Unicode funkcji zasobów (LoadStringW, na przykład), aby uzyskać zasoby jako dane Unicode.
W przypadku 16-bitowych zasobów ciągów 255 znaków jest maksymalną długością. W przypadku 32-bitowych zasobów ciągów maksymalna długość to 65535 znaków.