O řetězcích
Řetězcové funkce umožňují aplikacím kopírovat, porovnávat, řadit, formátovat a převádět řetězce znaků a také prostředky k určení typu znaku každého znaku v řetězci. Všechny řetězcové funkce podporují jednobajtemové, dvoubajtemové a unicode znakové sady, pokud tyto znakové sady podporují operační systém, na kterém je aplikace spuštěná.
Upozornění zabezpečení: Nesprávné použití řetězcových funkcí může způsobit problémy se zabezpečením vaší aplikace. Obvykle se jedná o přetečení vyrovnávací paměti, které může umožnit útok odmítnutí služby proti vaší aplikaci nebo injektáž spustitelného kódu útočníkem. Funkce Strsafe umožňují bezpečnější zpracování řetězců a doporučuje se pro lepší zabezpečení vaší aplikace. Další informace o těchto funkcích naleznete v tématu Použití funkce Strsafe.h.
Tato část popisuje následující témata.
Porovnání s řetězcovými funkcemi jazyka C Run-Time
Mnoho řetězcových funkcí duplikuje nebo vylepšuje známé řetězcové funkce ze standardní knihovny CRT (Run-time) jazyka C. Mnoho vylepšení umožňuje řetězcovým funkcím pracovat s unicode nebo rozšířenými znakovými sadami. Následující tabulka ukazuje funkce CRT, funkce Systému Windows (které podporují Unicode, na rozdíl od funkcí CRT) a Funkce StrSafe.
Funkce CRT String | Funkce Windows String | StrSafe – funkce |
---|---|---|
strcat | lstrcat | |
strcmp | lstrcmp | (žádná ekvivalentní funkce) |
strcpy | lstrcpy | |
strlen | lstrlen |
Funkce strlen například vždy vrátí počet bajtů v řetězci, ale funkce lstrlen vrátí počet hodnot TCHAR, které odkazují na bajty pro verze funkce ANSI nebo WCHAR hodnoty pro verze Unicode.
Následující řetězcové funkce se liší od standardních funkcí jazyka C, jako jsou tolower a toupper v tom, že pracují s libovolným znakem v znakové sadě. Pomocí funkce CharLower může aplikace například převést velké písmeno U s přehláskou (Ü) na malé písmeno (ü). Další informace o znakových sadách viz jednobajtové znakové sady.
Funkce | Popis |
---|---|
CharLower | Převede znak nebo řetězec na malá písmena. |
CharLowerBuff | Převede řetězec znaků na malá písmena. |
CharNext | Přesune se na další znak v řetězci. |
CharPrev | Přesune se na předchozí znak v řetězci. |
CharUpper | Převede znak nebo řetězec na velká písmena. |
CharUpperBuff | Převede řetězec na velká písmena. |
Následující řetězcové funkce určí znak na základě sémantiky jazyka vybraného uživatelem. Tyto funkce podporují Unicode.
Funkce | Popis |
---|---|
IsCharAlpha | Určuje, zda je znak abecední. |
IsCharAlphaNumeric | Určuje, zda je znak alfanumerický. |
IsCharLower | Určuje, zda je znak malé písmeno. |
IsCharUpper | Určuje, zda je znak velkými písmeny. |
Následující tabulka uvádí rozšíření Unicode pro standardní funkce CRT (Run-time) jazyka C. Jak už jsme zmínili dříve, funkce StrSafe umožňují bezpečnější zpracování řetězců a doporučují se pro lepší zabezpečení vaší aplikace.
Standardní funkce CRT | Funkce String | StrSafe – funkce |
---|---|---|
sprintf | wsprintf | |
vsprintf | wvsprintf |
Řetězcové prostředky
Aplikace, která udržuje řetězce znaků v prostředcích, lze s minimálním úsilím přeložit do nových jazyků. Místo hledání řetězců ve zdrojových modulech můžete jednoduše přeložit řetězce v souboru prostředků a znovu propojit aplikaci. Použití řetězcových prostředků navíc zjednodušuje vytváření verzí Unicode a jiných verzí aplikace ze stejných zdrojových souborů.
Funkce LoadString načte řetězcový prostředek ze spustitelného souboru aplikace. Funkce FormatMessage načte řetězcový prostředek a interpretuje možnosti formátování, které mohou být vloženy do řetězce.
Prostředky v binární podobě jsou uloženy ve formátu Unicode. Při načítání prostředků můžou aplikace použít verzi Unicode funkcí prostředků (LoadStringW, například) k získání prostředků jako dat Unicode.
U 16bitových řetězcových prostředků je maximální délka 255 znaků. U 32bitových řetězcových prostředků je maximální délka 65535 znaků.