における範囲外(列)の後には、非常に単純なCプログラムであります配列への文字列以下は出力されます:格納データ動的に割り当てられた配列
String = Elephant
String = ElephaDt
明らかに、私は、OSのメモリMGMTは私がPに動的に割り当てられた空間の範囲外の多くの要素を格納することができ、なぜ知っているだけので、好奇心5つのchar型の要素のために要求さ 。私が5文字のスペースしか割り当てられなかった場合、strcpy()はどのようにして5文字以上のさらに大きな文字列 "Elephant"を格納することができましたか?
Cには境界チェックがありません。境界から書き出すとコンパイラは不平を言うことはありません。それは*未定義の動作につながります*ので、しないでください。 –
@ Joachim Pileborgは「文句を言っても文句を言いませんが...」という振る舞いが定義されています。確かに、Cは境界チェックを指定していませんが、コンパイラはそれを採用することがあります。境界からの書き出しはUBです。 – chux
"なぜOSのメモリ管理によって、p内の動的に割り当てられた領域の範囲外にもっと多くの要素を格納することができましたか?" - >このような状況でコードが何をする必要があると思いますか? – chux