//SECTION I:
void main()
{
char str[5] = "12345"; //---a)
char str[5] = "1234"; //---b)
cout<<"String is: "<<str<<endl;
}
Output: a) Error: Array bounds Overflow.
b) 1234
//SECTION II:
void main()
{
char str[5];
cout<<"Enter String: ";
cin>>str;
cout<<"String is: "<<str<<endl;
}
さまざまな入力文字列を試してみましたが、驚いたことに、奇妙な結果が得られました。
ケースI:入力文字列:1234、出力:1234(これは予想される動作であるため、問題ありません)
ケースII:入力文字列:12345、出力:12345(コンパイラによってエラーは報告されませんが、エラーを予期していました:配列境界オーバーフロー。)
ケースIII:入力文字列:123456、出力:123456(コンパイラによってエラーは報告されませんでしたが、エラーを予期していました:配列境界オーバーフロー。)
................................................。
................................................。
ケースVI:入力文字列:123456789、出力:123456789(エラー:処理されていない例外。アクセス違反。)
私の疑問は、セクションIで容量よりも多くの文字を割り当てたときに、コンパイラがエラーを報告したことです。配列の境界がオーバーフローしました。
しかし、セクションIIで同じことを試しても、エラーは発生しません。なんでそうなの?注意:これはVisualStudioで実行しました