Sdílet prostřednictvím


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
StringCchCat
StringCchCatEx
strcat, wcscat, _tcscat
lstrcat
StrCat
strCatBuff
StringCchCatN
StringCchCatNEx
strncat
StrNCat
StringCchCopy
StringCchCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
StrCpy
StringCchCopyN
StringCchCopyNEx
strncpy, wcsncpy, _tcsncpy
stringCchGets
StringCchGetsEx
získá, _getws, _getts
StringCchPrintf
stringCchPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCchVPrintf
StringCchVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
,
StringCchLength
strlen, wcslen, _tcslen

 

Funkce počtu bajtů

Následující funkce používají počet bajtů místo počtu znaků.

Funkce Nahrazuje
StringCbCat
StringCbCatEx
strcat, wcscat, _tcscat
lstrcat
StrCat
strCatBuff
StringCbCatN
StringCbCatNEx
strncat
StrNCat
StringCbCopy
StringCbCopyEx
strcpy, wcscpy, _tcscpy
lstrcpy
StrCpy
StringCbCopyN
StringCbCopyNEx
strncpy, wcsncpy, _tcsncpy
StringCbGets
StringCbGetsEx
získá, _getws, _getts
StringCbPrintf
StringCbPrintfEx
sprintf, swprintf, _stprintf
wsprintf
wnsprintf
_snprintf, _snwprintf, _sntprintf
StringCbVPrintf
StringCbVPrintfEx
vsprintf, vswprintf, _vstprintf
vsnprintf, _vsnwprintf, _vsntprintf
wvsprintf
wvnsprintf
StringCbLength
strlen, wcslen, _tcslen

 

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.

Funkce StrSafe