MFC-stringについてh相関関数

2690 ワード

1.VS 2005でstrcpy、strcat、sprintfを使用して、mfcの'strcpy'was declared deprecated警告などが表示されます.
これは、VS 2005でCRTの関数のセットが不適切に使用されると、メモリリーク、バッファオーバーフロー、不正アクセスなどのセキュリティ上の問題が発生する可能性があると考えられているためである.これらの関数には、strcpy、strcatなどがあります.これらの問題について、VC 2005は、これらの関数のより高度なセキュリティバージョン、すなわち、これらの関数名の後に1つの_を追加することを提案する.sの関数です.これらのセキュリティバージョン関数は、strcpy_など、より効果的に使用できます.s,calloc_sなど.もちろん、古いバージョン、非セキュリティバージョンの関数を使用する場合は、_CRT_SECURE_NO_DEPRECATEタグは、これらの警告問題を無視します.方法は、コンパイルオプションC/C+|Preprocessor|Preprocessor Definitionsで、_CRT_SECURE_NO_DEPRECATEタグでOK
 
私が述べたように、もう一つのセキュリティチェックを受ける一般的な関数strcpy関数は、gets関数のように有効なバッファサイズを保証する方法がないので、コピーする文字列を収容するのに十分なバッファがあると仮定するしかありません.プログラムが実行されると、私が述べたように、安全のためにこれらの予想できない行為を避ける必要があります.これは安全なstrcpyを使用しています.s関数の例.    char source[] = "Hello world!";  char destination[20] = { 0 };  strcpy_s(destination, sizeof (destination) / sizeof (destination[0]), source);この新しいstrcpyが好きになる理由はたくさんあります.s関数.最も明らかな違いは、バッファサイズを確認するために使用される追加のバイト単位のパラメータです.これによりstrcpy_s関数は、書き込み文字がターゲットバッファの境界を超えていないことを決定するために実行時チェックを行うことができる.パラメータの有効性を決定するための他の検査方法もあります.デバッグバージョンでこれらの検出方法は、デバッグレポートを表示する「アサーション」を含む(assertions)メソッド.条件が満たされていない場合は、デバッグレポートが表示されます.デバッグでもリリースでも、特定の条件が満たされていない場合は、無効なパラメータマネージャが呼び出されます.デフォルトの動作は、アクセス競合を投げ出してアプリケーションを終了することです.これは、アプリケーションを継続的に実行するために非常に良いことです.予期せぬ結果は生じない.もちろん、strcpy_と似ていることを確認することでsの関数は無効なパラメータを呼び出さずに回避します.前の例では新しい_countofマクロはさらに簡略化され、このマクロシフトは誤った傾向を持つsizeofオペレータの必要性を捨てた.countofマクロは、Cタイプ配列の要素数を返します.このマクロ自体はテンプレートに対応しており、元のポインタを渡すとコンパイルできません.例としてstrcpy_s(destination, _countof(destination), source);
 
全部で3つのパラメータではありませんstrcpy_s(a,sizeof(a),b)sizeof(a)は、目的ポインタが許容できる最大文字の個数を表し、
 2. warning C4996: '_itoa' was declared deprecated
 _itoa(DispNum+1, s, 10);   _itoa_s(DispNum+1, s, 10,10);
  (http://zhidao.baidu.com/question/475097271.html?qbl=relate_question_4&word=%27_itoa%27)
errno_t _itoa_s(
int value, char *buffer, size_t sizeInCharacters, int radix ); radix _itoa_s (DispNum+1,s,10,10); //10 2-36

 3.CStringタイプを文字配列タイプに変換
CString str="hello"; 
char ch[20]; 
memset(ch,0,20);
memcpy(ch,str,str.GetLength()); 

 4.CStringとintの相互変換
CString str = _T("123");

int i = _ttoi(str);

===============

int i = 123;

CString str ;

str.Format(_T("%d"), i);