0
私はint配列にユーザーから得た数値を入力しようとしています。scanfとEOFを正しく使用する方法は?
しかし、printf
より大きい特定のインデックスを試すと、間違った番号が表示されます。
for(B_index=0,checker=0; B_index<SIZE&&!checker; B_index++)
{
checker=scanf("%d",&B[B_index]);
if(checker==EOF)
{
checker=1;
}
else if(checker<1)
{
printf("error");
return 1;
}
}
printf("%d",B[1]);
これは、C配列はバウンドチェックを行わない、つまり、配列内の要素へのアクセスが配列の範囲外かどうかをコンパイラがチェックしないためです。どうして? 2つの理由があります。1. Cの配列は実行時にポインタに変換されるため、配列の要素へのアクセスはすべてポインタ算術のようなものです。 2.それは言語にスピードを与えるので、信頼性とスピードのトレードオフです。 –