メインコンテンツ

標準ライブラリ ルーチンの無効な使用

標準ライブラリ関数の間違った引数

説明

この欠陥は、標準ライブラリの関数で無効な引数が使用された場合に発生します。この欠陥では、浮動小数点、整数、メモリまたは文字列の標準ライブラリ ルーチンでカバーされない他の関数に関係するエラーが検出されます。

リスク

標準ライブラリ関数で無効な引数を使用すると未定義の動作が発生します。

修正方法

修正方法は欠陥の根本原因によって異なります。たとえば、ポインターが NULL で初期化されて、特定の実行パスでその初期値が上書きされない場合、関数 printf の引数が NULL になる可能性があります。

以下の修正例を参照してください。

問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。

すべて展開する

#include <stdio.h>
#include <stdlib.h>

void print_null(void) {

  printf(NULL); 
}

関数 printf は文字列の入力引数または書式指定子のみを取ります。この関数では入力値が NULL であるため、有効な文字列ではありません。

修正 — 互換性のある入力引数を使用

1 つの修正方法として、入力引数を標準ライブラリ ルーチンの要件に適合するよう変更することができます。この例では、入力引数を文字に変更しました。

#include <stdio.h>

void print_null(void) {
    char zero_val = '0';
    printf((const char*)zero_val); 
}

結果情報

グループ: プログラミング
言語: C | C++
既定値: オン
コマンド ライン構文: OTHER_STD_LIB
影響度: High

バージョン履歴

R2013b で導入