Sdílet prostřednictvím


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
StringCchCat
StringCchCatEx
StringCbCat
StringCbCatEx
strcmp lstrcmp (žádná ekvivalentní funkce)
strcpy lstrcpy
StringCchCopy
StringCchCopyEx
StringCbCopy
StringCbCopyEx
strlen lstrlen
StringCchLength
StringCbLength

 

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

 

Ř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ů.