プロが教えるわが家の防犯対策術!

Visual Studio 2019 をダウンロードして C# の勉強を始めているのですが、せっかくなのでDOS時代に作った C のプログラムも試しています。以下は順列を生成するコードなのですが、

#define _CRT_SECURE_NO_WARNINGS

を最初の 1 行目に書かないと Visual Studio 2019 ではコンパイルエラーになります。これはなぜでしょうか。
_CRT_SECURE_NO_WARNINGS
でググってみたのですがいまいちよくわかりません。
※インデントは全角空白

#define _CRT_SECURE_NO_WARNINGS // これがないと、一番上の行にないとコンパイルエラーになる
#include<stdio.h>

int num[110];
int frag[110];
void fx(int n,int k)
{
  int i,f,j;
  for(i=0;i<n;++i)
  {
    f=frag[i];
    if(f == 0)
    {
      frag[i]=1;
      num[k] = i+1;
      if(k==1)
      {
        for(j=n;j > 0;--j)
        printf("%4d",num[j]);
        printf("\n");
      }
      else
      {
        fx(n,k-1);
      }
      frag[i] = 0;
    }
  }
}

int main()
{
  int i,k;
  printf("人数:");
  scanf("%d",&k);
  if(k > 100 || k < 0)
  {
    printf("ERROR!\n");
    return 0;
  }
  for(i=0;i<k;++i)
  {
    num[i] = frag[i] = 0;
  }
  fx(k,k);
  return 0;
}

A 回答 (2件)

SDLチェックっていうのがあって


scanf みたいな古い関数の使用時にセキュリティ上の問題で動作します。
SDL使用に該当defineが必要です。
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございました。

お礼日時:2021/10/14 09:47

言語仕様がレベルアップしていますので、古い言語仕様で書かれたソースがある場合に、改善要求として警告が出るみたいです。


例えば、sprintf を使っていると、危ないから sprintf_s を使うように警告するといった具合です。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

お礼日時:2021/10/14 09:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A