次のコードはエラーを引き起こし、アプリケーションを強制終了します。バッファーの長さはわずか 10 バイトで、テキストの長さは 22 バイトであるため (バッファー オーバーフロー)、これは理にかなっています。
char buffer[10];
int length = sprintf_s( buffer, 10, "1234567890.1234567890." );
アプリケーションをクラッシュさせずに報告できるように、このエラーをキャッチするにはどうすればよいですか?
編集:
以下のコメントを読んだ後、_snprintf_s を使用しました。-1 値を返す場合、バッファは更新されていません。
length = _snprintf_s( buffer, 10, 9, "123456789" );
printf( "1) Length=%d\n", length ); // Length == 9
length = _snprintf_s( buffer, 10, 9, "1234567890.1234567890." );
printf( "2) Length=%d\n", length ); // Length == -1
length = _snprintf_s( buffer, 10, 10, "1234567890.1234567890." );
printf( "3) Length=%d\n", length ); // Crash, it needs room for the NULL char