strcpy、wcscpyと_tcscpy関係strcpy_sとstrcpyの比較

1955 ワード

C++標準ライブラリ関数は、文字と文字列の操作関数を提供し、UNICODバージョンなどを提供します.

  
  
  
  
  1. char *strcpy(char *strDestination, const char *strSource);  
  2. wchar_t *wcscpy(wchar_t *strDestination, const wchar_t *strSource); 

wcscpy()はstrcpy()のワイド文字バージョンであり、_T類似、Visual C++は類似の同名関数を提供する:

  
  
  
  
  1. #ifdef  UNICODE   
  2.     #define _tcscpy     wcscpy  
  3. #else  
  4.     #define _tcscpy     strcpy  
  5. #endif 

 
_tcscpyはコンパイル時に条件に従って置き換えられ、非UNICodeプロジェクトであればstrcpy UNICodeプロジェクトに置き換えられwcscpyに置き換えられる
 
 
次にstrcpy_を使用します.sとstrcpyのセキュリティ比較
char szBuf[2] = {0};
strcpy_s(szBuf, 2, "12131");//新しいCRT関数strcpy(szBuf,"12131");//古いCRT関数
上記のコードでは,バッファオーバーフローの問題が明らかになった.strcpy_の使用s関数は異常を放出します.strcpy関数を使用した結果は未定です.プログラムの他の部分のメモリのデータが誤って変更されたため、異常は放出されませんが、プログラムのデータエラーが発生したり、不正なメモリアクセスによって異常が放出されたりする可能性があります.
新しいセキュリティ強化CRT関数を使用すると、どのようなメリットがありますか?簡単に言えば,新しい関数はパラメータの正当性の検査とバッファ境界の検査を強化し,誤りが発見されるとerrnoまたは異常を放出する.古いバージョンのこれらのCRT関数は、パラメータやバッファオーバーフローが誤って伝送された場合、エラーがすぐに発見されず、ロケータエラーにも大きな困難をもたらします.