web-dev-qa-db-ja.com

「strcpy」と「strcpy_s」の違いは?

strcpyを使用して文字列をコピーしようとすると、コンパイルエラーが発生しました。

error C4996 'strcpy': This function or variable may be unsafe.

代わりにstrcpy_sの使用を検討してください。非推奨を無効にするには、_CRT_SECURE_NO_WARNINGSを使用します。詳細については、オンラインヘルプを参照してください。

strcpystrcpy_sの違いは何ですか?

17
Bluebaby

strcpyは安全でない機能です。 strcpy()を使用して、文字列を格納するのに十分な大きさでないバッファに文字列をコピーしようとすると、バッファオーバーフローが発生します。

strcpy_s()は、strcpy()のセキュリティ強化バージョンです。 strcpy_sを使用すると、コピー中のバッファーオーバーフローを回避するために、宛先バッファーのサイズを指定できます。

char tuna[5];  // a buffer which holds 5 chars incluing the null character.
char salmon[] = "A string which is longer than 5 chars";

strcpy( tuna, salmon ); // This will corrupt your memory because of the buffer overflow.

strcpy_s( tuna, 5, salmon ); // strcpy_s will not write more than 5 chars.
20
Deadlock