web-dev-qa-db-ja.com

エラーC4996: 'scanf':この関数または変数はcプログラミングでは安全ではない可能性があります

パラメータ付きのユーザー定義関数を使用して最大数を見つける小さなアプリケーションを作成しました。実行すると、このメッセージが表示されます

エラー1エラーC4996: 'scanf':この関数または変数は安全ではない可能性があります。代わりにscanf_sの使用を検討してください。非推奨を無効にするには、_CRT_SECURE_NO_WARNINGSを使用します。詳細については、オンラインヘルプを参照してください。

これを解決するにはどうすればよいですか?

これは私のコードです

#include<stdio.h>

void findtwonumber(void);
void findthreenumber(void);

int main() {
    int n;
    printf("Fine Maximum of two number\n");
    printf("Fine Maximum of three number\n");

    printf("Choose one:");
    scanf("%d", &n);
    if (n == 1)
    {
        findtwonumber();
    }
    else if (n == 2)
    {
        findthreenumber();
    }
    return 0;
}

void findtwonumber(void)
{
    int a, b, max;
    printf("Enter a:");
    scanf("%d", &a);
    printf("Enter b:");
    scanf("%d", &b);
    if (a>b)
        max = a;
    else
        max = b;
    printf("The max is=%d", max);
}

void findthreenumber(void)
{
    int a, b, c, max;
    printf("Enter a:");
    scanf("%d", &a);
    printf("Enter b:");
    scanf("%d", &b);
    printf("Enter c:");
    scanf("%d", &c);
    if (a>b)
        max = a;
    else if (b>c)
        max = b;
    else if (c>a)
        max = c;
    printf("The max is=%d", max);
}
13
Chheang Phearum

単なるコンパイラの警告のように聞こえます。

scanf_sを使用すると、バッファオーバーフローの可能性を防ぎます。
参照: http://code.wikia.com/wiki/Scanf_s

scanfが危険な理由についての良い説明: scanfの欠点

したがって、提案されているように、scanfscanf_sに置き換えるか、コンパイラの警告を無効にすることができます。

12
user3742467

エラーを抑制する別の方法:C/C++ファイルの先頭に次の行を追加します。

#define _CRT_SECURE_NO_WARNINGS
8
JerryGoyal