次の方法で共有


Strsafe.h について

バッファーの処理が不適切なのは、バッファー オーバーランを伴う多くのセキュリティの問題に関係しています。 Strsafe.h で定義されている関数は、コード内で適切なバッファー処理のための追加処理を提供します。 このため、組み込みの C/C++ に対応する、および特定の Windows 実装を置き換えることを目的としています。 Strsafe.h は、Windows XP Service Pack 2 (SP2) 以降の Windows SDK で使用できます。

Strsafe 関数の利点は次のとおりです。

  • バッファの終端を越える書き込みが発生しないようなサイズの出力先バッファが、関数に必ず用意されます。

  • 意図する結果が演算で切り詰められても、バッファからは NULL で終端した結果が確実に得られます。

  • すべての関数は HRESULT 値を返します。成功コード (S_OK) は 1 つだけです。

  • 各関数は、対応する文字数 ("cch") またはバイト数 ("cb") バージョンで使用できます。

  • ほとんどの関数には、高度な機能に使用できる拡張 ("Ex") バージョンがあります。

詳細については、以下のセクションを参照してください。

文字数関数

次の関数は、バイト数ではなく文字数を使用します。

機能 置き換えます
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
gets、_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

 

バイトカウント関数

次の関数は、文字数ではなくバイト数を使用します。

機能 置き換えます
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
gets、_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

 

Strsafe.h の使用

  • Strsafe 関数をインラインで使用するには、他のすべてのヘッダー ファイルの #include ステートメントに従って、次に示すようにヘッダー ファイルを含めます。

    #include <strsafe.h>

  • ライブラリ形式で関数を使用するには、Strsafe.h を含める前に次のステートメントを含めます。 ただし、インライン関数を使用することをお勧めします。

    #define STRSAFE_LIB

    Note

    : 次の関数をインライン関数として使用する必要があります。 StringCbGetsStringCbGetsExStringCchGets、および StringCchGetsEx

     

  • ファイルに Strsafe.h を含めると、Strsafe.h 関数に置き換えられた古い関数は非推奨になります。 これらの古い関数を使用しようとすると、新しい関数を使用するように指示するコンパイラ エラーが発生します。 この動作をオーバーライドする場合は、Strsafe.h を含める前に次のステートメントを含めます。

    #define STRSAFE_NO_DEPRECATE

  • 文字数関数のみを許可するには、Strsafe.h を含める前に次のステートメントを含めます。

    #define STRSAFE_NO_CB_FUNCTIONS

  • バイトカウント関数のみを許可するには、Strsafe.h を含める前に次のステートメントを含めます。

    #define STRSAFE_NO_CCH_FUNCTIONS

    Note

    STRSAFE_NO_CB_FUNCTIONSまたはSTRSAFE_NO_CCH_FUNCTIONSを定義できますが、両方を定義することはできません。

     

  • 一部の Strsafe 関数には、ロケールに対応するバージョンがあります。 既定では、ヘッダーはこれらの関数を宣言しません。 これらの宣言を有効にするには、Strsafe.h を含める前に次のマクロ ステートメントを含めます。

    #define STRSAFE_LOCALE_FUNCTIONS

  • サポートされる文字列の最大長は、ANSI または Unicode の 2,147,483,647 (STRSAFE_MAX_CCH) 文字です。

Strsafe 関数