Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

c++ 書き込みと配列

解決したいこと

キーボードから5つの整数を読み込んで、int型で要素数5の配列aに格納(代入)したい。

該当するソースコード

#include

int main() {
int a[5];
int i, kakikomi;

for (i = 0;i < 5;i++) {

	printf("a[%d]=", i);    scanf("% d", &kakikomi);
}

return(0);

}

###エラー
image.png

どこがおかしいですかね?お願いします。
0

2Answer

scanf("% d", &kakikomi);
        ^

余分なスペースが入っています.

scanf()関数は,文字列を入力する際に入力長のチェックを行わないため,バッファオーバーランによる領域破壊を起こします.
Visual StudioおよびMSVCではscanf()関数のコンパイルをデフォルトで通しません.

代替のscanf_s()では引数を追加指定することにより入力サイズを制限します.

2Like

scanfは安全でないと書いてあります。

ソースコードの一番上に以下のコードを挿入してみてください。

#define _CRT_SECURE_NO_WARNINGS

配列aに代入したい場合は以下のようにします。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
using namespace std;

int main() {
	int a[5];
	int kakikomi;

	for (int i = 0; i < 5; i++) {
		printf("a[%d]=", i);

		// 配列aに直接代入するなら
		scanf("%d", &a[i]);

		// kakikomi変数を利用するなら
		scanf("%d", &kakikomi);
		a[i] = kakikomi;
	}

	// 確認用
	for (int i = 0; i < 5; ++i)
	{
		printf("a[%d]=%d\n", i, a[i]);
	}
}
1Like

Comments

  1. @TonyAven

    Questioner

    書き込みができるようにはなりましたが、繰り返し実行されず、一つの要素しか書き込みができません。
    どこがおかしいですかね?
    また、scanfが安全ではないと言われている理由は何ですかね?
    お願いします。

Your answer might help someone💌