書式文字列指定子と引数の不一致
printf
のような関数で、書式指定子が対応する引数と一致していません
説明
この欠陥は、printf
などの書式設定付き出力関数内の書式指定子が、それに対応する引数と一致しない場合に発生します。たとえば、unsigned long
型の引数の書式指定は %lu
でなければなりません。
リスク
書式指定子と対応する引数の間の不一致により、未定義の動作が発生します。
修正方法
書式指定子が対応する引数と一致することを確認します。たとえば、次の例では、%d
指定子は文字列引数 message
に一致せず、%s
指定子は整数引数 err_number
に一致しません。
const char *message = "License not available"; int err_number = -4; printf("Error: %d (error type %s)\n", message, err_number);
認識される引数のデータ型が整数プロモーションによって変更された場合、解析結果に元の型とプロモーション後の型の両方が示されます。書式指定子は整数プロモーション後の型と一致していなければなりません。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
例
結果情報
グループ: プログラミング |
言語: C | C++ |
既定値: オン |
コマンド ライン構文: STRING_FORMAT |
影響度: Low |
バージョン履歴
R2013b で導入