Udostępnij za pośrednictwem


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
StringCchCat
StringCchCatEx
StringCbCat
StringCbCatEx
strcmp lstrcmp (brak równoważnej funkcji)
strcpy lstrcpy
StringCchCopy
StringCchCopyEx
StringCbCopy
StringCbCopyEx
strlen lstrlen
StringCchLength
StringCbLength

 

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
StringCchPrintf
StringCchPrintfEx
StringCbPrintf
StringCbPrintfEx
vsprintf wvsprintf
StringCchVPrintf
StringCchVPrintfEx
StringCbVPrintf
StringCbVPrintfEx

 

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.