1. ホーム
  2. c

[解決済み] エラー C4996: 'scanf' です。この関数または変数は、C言語プログラミングでは安全でない可能性があります。

2022-02-11 16:23:11

質問

ユーザー定義関数とパラメータを使用して最大数を求める小さなアプリケーションを作成しました。 それを実行すると、次のようなメッセージが表示されます。

<ブロッククオート

エラー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);
}

解決方法は?

単なるコンパイラの警告のようですが。

の使用法 scanf_s バッファオーバーフローの可能性を防ぐことができます。
ご覧ください。 http://code.wikia.com/wiki/Scanf_s

なぜそうなるのか、その理由がよくわかる scanf は危険な場合があります。 scanfのデメリット

そこで、提案されたように scanfscanf_s またはコンパイラの警告を無効にしてください。