O společnosti Strsafe.h
Špatné zpracování vyrovnávací paměti je spojeno s mnoha problémy se zabezpečením, které zahrnují přetečení vyrovnávací paměti. Funkce definované v Strsafe.h poskytují další zpracování pro správnou manipulaci s vyrovnávací pamětí ve vašem kódu. Z tohoto důvodu mají nahradit své předdefinované protějšky C/C++ a také konkrétní implementace Windows. Strsafe.h je k dispozici v sadě Windows SDK počínaje systémem Windows XP s aktualizací Service Pack 2 (SP2).
Mezi výhody funkcí Strsafe patří:
Velikost cílové vyrovnávací paměti je vždy předávána do funkce, aby se zajistilo, že funkce nezapisuje mimo její hranice.
Vyrovnávací paměti se zaručují, že budou ukončeny hodnotou null, i když operace zkrátí zamýšlený výsledek.
Všechny funkce vrací hodnotu HRESULT s pouze jedním možným kódem úspěchu (S_OK).
Každá funkce je dostupná ve verzi odpovídajícího počtu znaků ("cch") nebo počtu bajtů ("cb").
Většina funkcí má k dispozici rozšířenou verzi ("Ex") pro pokročilé funkce.
Podrobnosti najdete v následujících částech.
Funkce pro počítání znaků
Následující funkce používají počet znaků místo počtu bajtů.
Funkce | Nahrazuje |
---|---|
, | |
Funkce počtu bajtů
Následující funkce používají počet bajtů místo počtu znaků.
Funkce | Nahrazuje |
---|---|
Použití strsafe.h
Pokud chcete použít inline funkce Strsafe, zahrňte hlavičkový soubor, jak je znázorněno zde, po příkazech #include pro všechny ostatní hlavičkové soubory.
#include <strsafe.h>
Chcete-li použít funkce ve formuláři knihovny, před zahrnutím strsafe.h uveďte následující příkaz. Doporučuje se ale používat vložené funkce.
#define STRSAFE_LIB
Poznámka
: Následující funkce musí být použity jako vložené funkce: StringCbGets, StringCbGetsEx, StringCchGetsa StringCchGetsEx.
Pokud do souboru zahrnete Strsafe.h, starší funkce nahrazené funkcemi Strsafe.h budou zastaralé. Pokusy o použití těchto starších funkcí způsobí chybu kompilátoru s oznámením, že používáte novější funkce. Pokud chcete toto chování přepsat, před zahrnutím strsafe.h uveďte následující příkaz.
#define STRSAFE_NO_DEPRECATE
Pokud chcete povolit pouze funkce počtu znaků, před zahrnutím strsafe.h zahrňte následující příkaz.
#define STRSAFE_NO_CB_FUNCTIONS
Pokud chcete povolit pouze funkce počtu bajtů, před zahrnutím strsafe.h uveďte následující příkaz.
#define STRSAFE_NO_CCH_FUNCTIONS
Poznámka
Můžete definovat STRSAFE_NO_CB_FUNCTIONS nebo STRSAFE_NO_CCH_FUNCTIONS, ale ne obojí.
Některé funkce Strsafe mají verze s podporou národního prostředí. Ve výchozím nastavení hlavička tyto funkce nedeklaruje. Pokud chcete tyto deklarace povolit, před zahrnutím strsafe.h zahrňte následující příkaz makra.
#define STRSAFE_LOCALE_FUNCTIONS
Maximální podporovaná délka řetězce je 2 147 483 647 (STRSAFE_MAX_CCH) znaků, a to buď ANSI, nebo Unicode.
Související témata