Microsoft には感銘を受けませんmemcpy_s()
。送信先のバッファー サイズを指定するのは呼び出し元次第だからです。(ソース バッファと宛先バッファがオーバーラップする場合を除いて)うまくいかない主なmemcpy()
原因は、宛先バッファが実際にどれだけ大きいかを知らないことです。
次の例に示すエラーのクラスが 1 つあると思います。
char anArray[10]
char* foo = anArray;
memcpy_s(foo, sizeof foo, somewhereElse, 10);
// or
memcpy_s(foo, sizeof *foo, somewhereElse, 10);
ただし、これらは両方とも C ポインターの基本的な誤解を示しており、コードに関する唯一の問題ではない可能性があります。
また、目的地が小さすぎる場合はどうしますか? 切り捨てられたデータを続行しますか? 「警告: プログラマーはばかです」というエラー メッセージを出しますか? いいえ、コピーを開始する前に、宛先バッファーが十分に大きいことを知っておくことをお勧めします。
memcpy_s()
また、質問のリンクでは、ヌル ポインター チェックについて説明しています。繰り返しますが、あなたは何をするつもりですか?プログラムをクラッシュさせることは、正常に実行できるすべてのことです。null ではないはずのポインターが null の場合、プログラムの実行環境のどの部分も信頼できないからです。また、最新の PC オペレーティング システムではmemcpy()
、ヌル ポインターを逆参照しようとするとすぐにプログラムがクラッシュします。