私はビジュアル C++ 2008 で systemC を使用しています。単純な hello world プログラムを作成しました。ただし、このエラーが繰り返し発生します。
警告 C4996: 'sprintf': この関数または変数は安全でない可能性があります。
なぜこれが起こっているのですか?助けていただければ幸いです。
私はビジュアル C++ 2008 で systemC を使用しています。単純な hello world プログラムを作成しました。ただし、このエラーが繰り返し発生します。
警告 C4996: 'sprintf': この関数または変数は安全でない可能性があります。
なぜこれが起こっているのですか?助けていただければ幸いです。
sprintf()
コンパイラは、バッファの制限をチェックしないため、バッファオーバーフローが発生する可能性があるため、使用を警告します。代わりにsnprintf()
、渡された制限を超えてバッファをいっぱいにすることのないものを使用してください。
このアドバイスは、マンページでも提供されています。
sprintf()とvsprintf()は任意の長さの文字列を想定しているため、呼び出し元は実際のスペースをオーバーフローさせないように注意する必要があります。これを保証することはしばしば不可能です。生成される文字列の長さはロケールに依存し、予測が難しいことに注意してください。代わりにsnprintf()とvsnprintf()を使用してください(またはasprintf(3)とvasprintf(3))。
それは安全ではありません-MSDN から
書き込まれる文字数を制限する方法はありません。つまり、sprintfを使用するコードはバッファオーバーランの影響を受けやすくなります。バッファーに書き込まれる最大文字数を指定する関連関数_snprintfの使用を検討するか、_scprintfを使用して必要なバッファーの大きさを判別してください。また、フォーマットがユーザー定義の文字列でないことを確認してください。